Javascript中内部执行机制的几个例子分析
废话不多说,直接先看情况
if (!("a" in window)) {
var a = 1;
}
alert(a);
那么,alert出来的是神马呢?1?
还是跑一下最实际。
代码处理的2个阶段:
1、变量,函数的声明,解析进入上下文;
2、代码执行
在分析上面的这道题之前在来看看另外一道题
myname = "global";
function func() {
alert(myname);
var myname = "local";
alert(myname);
}
func();
这又会alert出什么呢?global,然后是local吗?
undefined呢?
javascript中,函数变量预解析。
不明白,看看实际上上面的代码在执行的时候,会变成这样
var a;
if (!("a" in window)) {
var a = 1;
}
alert(a);
所以最好alert出来的结果是undefined,因为var a = 1;根本没有被执行。可能还不是很明白,在看看另外一道
myname = "global";
function func(){
var myname;
alert(myname);//"undefined"
myname = "local";
alert(myname);//"local"
}
func();
在执行的时候,代码会变成这样,你可能会觉得第一个alert应该是global,但结果并不是预期的。
全局变量中有一个myname,在函数内部是可以访问全局变量的,但是,在函数内部又定义了一个与全局变量重名的局部变量,而这个变量的赋值是在第一个alert之后,所以呢,在函数执行起来实际上会在最开始的地方对函数内部的变量进行统一的预解析,无论你在函数的什么时候来定义变量,也就造成代码变成上面这样,alert出undefined而不是我们最初预期的global。