美文网首页
变量提升问题

变量提升问题

作者: 迪爷 | 来源:发表于2016-12-25 21:05 被阅读0次
         var f = function(){
           console.log(scope); //undefined,只提升了变量的声明
           var scope = 'f';
           console.log('sss',scope);//此时结果是'f'
         }
         f(); 
    
       
         
    

    这是 变量提升问题

    1. 变量提升,

    很简单,就是把变量提升提到函数的top的地方。我们需要说明的是,变量提升 只是提升变量的声明,并不会把赋值也提升上来。
    比如:我们定义三个变量:
      (function(){ 
            var a='One'; 
            var b='Two';
            var c='Three';})()    
    
    实际上它是这样子的:
      (function(){
        var a,b,c;
        a='One';
        b='Two';
        c='Three';
    })()
    
    这个时候就把变量提升了呀。
    好,我们现在回到第一段code里面。为什么会undefined呢?其实,根据上面变量提升以及js的作用域(块级作用域)的分析,得知 上面代码真正变成如下:
    var v='Hello World';
    (function(){
        var v;
        alert(v);
        v='I love you';
    })()
    
    所以,才会提示说“undefined”。
    从这里,我们也学习到,我们在写js code 的时候,我们需要把变量放在函数级作用域的顶端,比如我在上面所举的例子:var a,b,c;。以防止出现意外。

    2. 函数提升

    函数提升是把整个函数都提到前面去。
    在我们写js code 的时候,我们有2种写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明才能被提升。

    函数声明方式提升【成功】

    function myTest(){
        foo();
        function foo(){
            alert("我来自 foo");
        }
    }
    myTest();
    

    函数表达式方式提升【失败】

    function myTest(){
        foo();// 报错
        console.log('foo output',foo);// 这个代表了变量声明提升,undefined
        var foo =function foo(){
            alert("我来自 foo");
        }
    }
    myTest();
    
    function.png

    相关文章

      网友评论

          本文标题:变量提升问题

          本文链接:https://www.haomeiwen.com/subject/hwsdvttx.html