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

关于js中 var 的变量提升问题

关于js中 var 的变量提升问题

肥皂起泡泡 2019-02-28 14:15:28
变量提升    var a="show";    function hah(){        alert(a);//undefined        var a=4;        alert(a);//4    }    hah();这个我可以理解function hah(number){        var a="show";        while(number!=0){            alert(a);//show            var a=4;            alert(a);//4            number--;        }    }   hah(1);   为什么这里的a 弹出的是show
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

通俗的给你解释一下!!


js执行顺序一般认为从上而下 但是函数声明权重高 提升 var声明提升 可以理解为

函数 > var >自上到下 

(并不是完整的就是这样 只是通俗给你解释上面这套题写的表达式, 但是这个成立)


然后捋一下  先函数声明  声明hah  然后var 声明 此时为未定义   然后hah(1)调用函数,调用

的时候进行一系列 赋值 操作 自上从下撸代码就可以了   至于参数这个number以及下面的判断

都是迷惑你的, 别被迷惑,去掉也是show  4这样的结果


查看完整回答
反对 回复 2019-03-12
?
温温酱

TA贡献1752条经验 获得超4个赞

因为在ES6之前,JavaScript没有块级作用域,只有全局作用域和函数作用域。

变量提升的本质是将变量声明提升到它所在作用域的最开始的部分。

浏览器环境 window 是全局作用域,函数 function 包裹的是函数作用域。

while 不是函数,它没有作用域。所以,在条件为 true 的时候相当于:


function hah(number){

        var a="show";

        alert(a);//show

        var a=4;

        alert(a);//4

        number--;

    }

 hah(1);  

   

再进一步分解,就是:


function hah(number){

    var a;

    var a;

    a = "show";

    alert(a);//show

    a=4;

    alert(a);//4

    number--;

}

hah(1);  


查看完整回答
反对 回复 2019-03-12
?
慕斯王

TA贡献1864条经验 获得超2个赞

等价于


function hah(number){

        var a="show";

        var a;

        while(number!=0){

            alert(a);//show

            a=4;

            alert(a);//4

            number--;

        }

}

hah(1); 


查看完整回答
反对 回复 2019-03-12
  • 3 回答
  • 0 关注
  • 1328 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号