猿问

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

变量提升

    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


肥皂起泡泡
浏览 1329回答 3
3回答

陪伴而非守候

通俗的给你解释一下!!js执行顺序一般认为从上而下 但是函数声明权重高 提升 var声明提升 可以理解为函数 > var >自上到下 (并不是完整的就是这样 只是通俗给你解释上面这套题写的表达式, 但是这个成立)然后捋一下  先函数声明  声明hah  然后var 声明 此时为未定义   然后hah(1)调用函数,调用的时候进行一系列 赋值 操作 自上从下撸代码就可以了   至于参数这个number以及下面的判断都是迷惑你的, 别被迷惑,去掉也是show  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);  

慕斯王

等价于function hah(number){        var a="show";        var a;        while(number!=0){            alert(a);//show            a=4;            alert(a);//4            number--;        }}hah(1); 
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答