javaScript 预编译期和执行期

当javaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数预先进行处理。而变量的初始化过程则出现在执行期。

javaScript在预编译期会先预处理声明的变量,但变量的赋值操作发生在javaScript的执行期,而不在预编译期。

实例:

var a = 1;                 //声明并初始化全局变量
(function f(){              
   alert(a);               //返回undefined
   var a = 2;              //声明并初始化局部变量
   alert(a);               //返回2
})();

上面码显示,由于在函数内部声明了一个同名局部变量a,所以在预编译期,js使用该变量覆盖掉全局变量对于函数内部的影响。而在执行期间,局部变量a未赋值,所以在函数第一行代码中读取局部变量a的值也就是是undefined了,当执行第二行代码时,则为局部变量赋值2,所以在第三行中就显为2。

在预编译期对函数的预处理就是之前提到函数声明提升(function declaration hoisting),具体实例请参考文章:javascript 函数声明与函数表达式

上一篇: DOMContentLoaded与load的区别
下一篇: 数据类型的检测
作者邮箱: 203328517@qq.com