美文网首页
JavaScript十日谈,变量声明与作用域

JavaScript十日谈,变量声明与作用域

作者: 低着头走路 | 来源:发表于2022-02-25 08:24 被阅读0次

    第一日,var的问题

    你好,max

    你一直在用var声明变量吗?

    对啊,为什么问这个问题,我甚至觉得这不应该是个问题。不用var用什么?

    好吧,看来你还没有接触过es6。那我换一种问法,你在使用var的过程中有遇到过什么问题吗?

    这倒是有,好像还不止一个。

    第一个问题

    我在for循环中定义的变量i,循环结束后,在循环体外面居然可以访问到这个变量i,并且有值。

    还有,我在一个if语句内声明了一个变量k,哪怕这个if语句永远不会执行,我依然可以在if语句外访问到这个变量k。

    再就是,我定义了一个变量,又定义了一个函数,我把函数放在了变量的上面,却不影响这个函数对变量的访问。

    我一直疑惑,这是为什么,你知道是怎么回事吧。

    这个现象叫变量提升。

    是说用var定义的变量,会在当前作用域内发生位置变换,将其挪到最顶部,相当于你是在第一行定义了一个变量。

    我们回头看一下你刚说的那几种情况,是不是得到了合理的解释。

    对于for循环相当于

    var i;for(i=0;i<10;i++)console.log(i)

    对于if内定义相当于

    var k;if(false)console.log(k)

    对于函数前置相当于

    var f;function()console.log(f)

    原来如此!

    那这个变量提升现象能避免吗?我还是希望程序完全按照自己的预期来执行。

    当然可以,那就是es6新引入的变量声明方式let,这个改天再谈,今天我们就只关心var

    相关文章

      网友评论

          本文标题:JavaScript十日谈,变量声明与作用域

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