(function(){
a = 5;
alert(window.a);
var a = 10;
alert(a);})();这个先打印出 undefined 然后是10,为什么呀?
3 回答

烙印99
TA贡献1829条经验 获得超13个赞
这题目有点神奇 不只是变量提升 是变量提升的应用了。。正解是 var a = 10 在预编译的时候会在函数里进行变量提升,这个大家都回答到了,然后 变量提升相当于进行了var a 操作,然后a =10 这条代码解释执行的时候。。变成了赋值操作,不再进行隐式生命全局变量的操作,导致window.a为undefined,出这道题的人真的机智!!!!!!!

慕标琳琳
TA贡献1830条经验 获得超9个赞
第一个 a=5 没用var, 它并没有创建变量a, 而是向上级作用域找变量a, 自然是找不到, 所以会创建a, 但创建的a是本域的, 不是window域(顶级域)的, 所以window.a还是undefined .
(function(){
a = 5;
alert(a); //==> 5
alert(window.a); //==> undefined
var a = 10;
alert(a); //==> 10
})();
添加回答
举报
0/150
提交
取消