码迷,mamicode.com
首页 > Web开发 > 详细

JS预解析

时间:2015-07-09 19:32:42      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

1.在逐行读js代码前,解析器会先提取所有声明的var变量和函数

js解析器会先把脚本里所有var变量声明读一遍,但是它只读变量名字,不读变量值,一开始它会赋给所有读到的var变量一个【未定义】的值。而js解析器提取函数是整块提取的读出来,把函数当作整体来看待,也就是说读变量是没值的,读函数是有内容的。这个过程就是js的预解析

所以在逐行读代码的这一步时,解析器每找到一个var声明,就会去看先前提取的东西中有没有它的值(往往是【未定义】)

2.var a=0;

var是声明, a=0是表达式

如果你只写了a=0时,预解析就不会提取a,那么当后面你要用到a时,解析器去仓库中没有找到a,就会报错,而不是告诉你“a的值是未定义”;

 

3.预解析时有一条重要原则,当函数命名冲突了(重名),解析器会【“留下函数,丢掉变量,无关函数声明和变量声明的顺序”】,也就是哪怕先声明的函数a,后声明的变量a,预解析仓库中存的a的值也是函数值而非 未定义(变量的值)。

 

4.【表达式】  

    带有= + - * /  这样“可以改变值的符号的”才叫表达式,一个单纯函数的声明是不会改变任何值的(没有表达式),所以看下面例子

技术分享

在这个图中,当解析器执行到第二部“逐行读代码”时,第39行的声明并没有改变预解析仓库中的值,因为它不是表达式。

未完待续

 

JS预解析

标签:

原文地址:http://www.cnblogs.com/xisitan/p/4633895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!