JS中的预解析
js预解析对于很多学习web前端开发的新手们很困扰,总是很难搞懂到底是个什么东西,今天零度就为大家简单的分析一下,争取让大家都明白!
首先,看一下下面的代码:
alert(a);
var a = 1;
这段代码大家认为运行时会弹出什么?相信很多人会回答”1“,其实弹出的是undefined!
为什么呢?我们来分析一下:首先这段js代码是一个alert,我们知道alert是一个弹出函数,弹出后面括号里面的东西,这里面我们给了一个变量a,那么这个变量a的值是多少呢?这时,js解析器并不知道,所以它会返回一个undefined,也就是未定义的!
再来看下面一段代码:
alert(a);
a = 1;
这里,我们把变量定义的var去掉,在运行看看,发现竟然什么也没弹出,用各个浏览器的调试器一看,竟然报错!
这又是为什么呢?
原因其实就是js解析器会在页面js代码正式运行以前,进行预解析,会把页面中用var定义的变量,保存在一个”仓库“里,而当它遇到类似于”var a = 1;“这样的表达式的时候,才会给变量赋值。
也就是说一开始的变量的值都是undefined。
第二段代码为什么会报错呢?因为我们大家知道,不用var定义的变量,默认是全局变量,也就是说js解析器不会把这样的变量放在”仓库“中,所以当我们使用alert函数的时候,它就会报错!
这下大家明白了吧,也就是说js解析器会在页面正式运行之前,把用var、function等定义的变量和函数先保存在”仓库中“,当运行到需要使用这些变量和函数的时候,js解析器会首先去”仓库“中寻找,如果”仓库“中的值是未定义的,它就会直接返回undefined!
好了,用两个简单的例子向大家简单说明了js预解析的含义,如果大家还有不懂的地方,欢迎给我留言!
JS中的预解析的更多相关文章
- 第112天:javascript中函数预解析和执行阶段
关于javascript中的函数: 1.预解析:把所有的函数定义提前,所有的变量声明提前,变量的赋值不提前 2.执行 :从上到下执行,但有例外(setTimeout,setInterval,aja ...
- js作用域其二:预解析
文章目錄 解析机制 JavaScript是一门解释型的语言 , 想要运行js代码需要两个阶段 编译阶段: 编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript ...
- 转:JS中生成和解析JSON
原文地址:JS中生成和解析JSON 1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- js中的预编译
预编译 js执行顺序: 词法/语法分析 预编译 解释执行 js中存在预编译 function demo() { console.log('I am demo'); } demo(); //I am d ...
- javaScript中的小细节-script标签中的预解析
首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...
- js中的预加载与懒加载(延迟加载)
js中加载分两种:预加载与延迟加载 一. 预加载,增强用户的体验,但会加载服务器的负担.一般会使用多种 CSS(background).JS(Image).HTML(<img />) . ...
- JS作用域概念-预解析规则
// 作用域: // 域:空间.范围.区域…… // 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var funct ...
- JS中生成和解析JSON
1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name = "jyy"; ...
随机推荐
- zookeeper伪分布安装配置
1.下载路径为:http://mirrors.cnnic.cn/apache/zookeeper/stable/ 2.安装: 第一步 解压zookeeper压缩包: 进入 zookeeper安装目录 ...
- HBase框架基础(三)
* HBase框架基础(三) 本节我们继续讨论HBase的一些开发常识,以及HBase与其他框架协调使用的方式.在开始之前,为了框架之间更好的适配,以及复习之前HBase的配置操作,请使用cdh版本的 ...
- 原生js实现发送验证码
var form = { myfun:function(){ var el = form.config().el; var button = form.config().button; var tim ...
- 不再安全的 OSSpinLock
自旋锁的本质是持续占有cpu,直到获取到资源.与其他锁的忙等待的实现机制不同. 昨天有位开发者在 Github 上给我提了一个 issue,里面指出 OSSpinLock 在新版 iOS 中已经不能再 ...
- SSD-tensorflow-2 制作自己的数据集
VOC2007数据集格式: VOC2007详细介绍在这里,提供给大家有兴趣作了解.而制作自己的数据集只需用到前三个文件夹,所以请事先建好这三个文件夹放入同一文件夹内,同时ImageSets文件夹内包含 ...
- P3066 [USACO12DEC]逃跑的BarnRunning Away From… 树上差分_树上倍增
code: #include <cstdio> using namespace std; #define ll long long const int N=200005; int n,fa ...
- linux下python3源码安装及卸载
Linux下Python3的源码编译安装和卸载方法 [日期:2019-06-21] 来源:博客园 作者:wuli潇萧 [字体:大 中 小] (一)Linux下软件的源码编译安装和卸载方法 L ...
- 【noip2016】蚯蚓(单调性+队列)
题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q&l ...
- 用xmanager6启动Linux上的图形界面程序
1.下载Xmanager6 并自行安装,这里不赘述了 2.打开Xmanager.启动Xstart 3.按提示输入:主机IP,协议,用户名,命令,完成后点击“保存”,接着点击“运行”,运行xmanage ...
- Raspberry Pi - 调整你的SD卡分割区的大小
在使用Win32DiskImager为一张空白的SD卡刷入新的Rasbian系统后,卡上的可用剩余空间并不大, 本人有一张8G的SD卡,但是刷入4.1的Rasbian后,用df -h查看,根目录下的空 ...