var myvar = 'my value'; (function() { alert(myvar); // undefined var myvar = 'local value'; })();
为什么会弹出undefined????
因为变量声明被“预解析”。
在当前的作用域内,无论在哪里变量声明,在幕后,其都在顶部被“预解析”了。不过,仅声明被“预解析”。该变量即使初始化,其当前的值,在作用域的顶部,也会被设置成undefined
。
变量声明置顶解析:
(function() {
var a = 'a';
var b = 'b';
var c= 'c';
})();
相对于
(function() {
var a, b, c;
a = 'a';
b = 'b';
c= 'c';
})();
myvar先声明但后赋值。所以弹出的时候没赋值,弹出undefined。