美文网首页
关于变量提升的问题

关于变量提升的问题

作者: 变量只提升声明不提升赋值 | 来源:发表于2021-08-19 17:42 被阅读0次
        var foo = 1
        function f(){
            console.log(foo)
            var foo = 2
            console.log(foo)
        }
    

    此段代码输出的分别是undefined 和2


    image.png

    虽然在外面声明了一个foo,但是在函数里也同样声明了一个foo变量。所以,函数内部的foo就会将外部的全局变量暂时覆盖掉。注意,只在当前函数内覆盖,其他地方使用全局变量依旧是1的值。

    函数中的代码可以看成是

        function f(){
            var foo
            console.log(foo)
            foo = 2
            console.log(foo)
        }
    

    因为var了foo变量,所以这个时候变量的声明提升到了代码段的最顶部。也就是第一次打印的上面一行。
    但是变量提升是只提升声明,不提升赋值的。所以仅仅是提升了一个 var foo 。这个时候第一次打印自然也就是输出undefined 了。而第三行给foo付了一个值。那第四行打印自然就打印出了2。

    知识点:局部声明的变量和全局的变量同名时,在局部会覆盖掉全局变量。但是不影响全局变量在别处使用。
    变量提升只提升声明不提升赋值

    相关文章

      网友评论

          本文标题:关于变量提升的问题

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