为了账号安全,请及时绑定邮箱和手机立即绑定

一道js面试题,觉得和变量提升有关

一道js面试题,觉得和变量提升有关

慕莱坞森 2018-08-01 16:30:31
(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,出这道题的人真的机智!!!!!!!

查看完整回答
反对 回复 2018-08-05
?
慕标琳琳

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

})();


查看完整回答
反对 回复 2018-08-05
  • 3 回答
  • 0 关注
  • 1213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信