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

(function(){
    a = 5;
    alert(window.a);
    var a = 10;
    alert(a);})();

这个先打印出 undefined 然后是10,为什么呀?


慕莱坞森
浏览 1224回答 3
3回答

烙印99

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

慕标琳琳

第一个 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})();
打开App,查看更多内容
随时随地看视频慕课网APP