标签:预编译期 执行期
在javascript中执行如下代码:
var a = 10;
function outer(){
alert(a);
var a = 20;
}
outer();
会产生一个奇怪的结果undefined.其实这是代码执行的两个过程及作用域的问题。
代码执行的两个过程:
预编译期:声明变量、定义函数、创建函数空间
执行期 :变量赋值、语句执行
对于以上代码,在预编译期,声明一个全局变量a,定义函数outer(),声明一个局部变量a;
在执行期,执行outer(),执行alert(a),该语句会首先在outer()的局部环境中寻找a,于是找 到了预编译期的第二个a,由于alert(a)在var a = 20 之前,所以此时的这个a 是出于undefined状 态,所以结果就是undefined了。
标签:预编译期 执行期
原文地址:http://9797673.blog.51cto.com/9787673/1826751