资讯专栏INFORMATION COLUMN

JS基础——变量提升

wangbjun / 723人阅读

摘要:变量提升在中,通过声明的变量,无论在何处申明,都会被视为声明于所在函数的顶部如果不在函数内,则视为全局作用域顶部。通常建议变量申明优先使用,然后再使用函数提升函数声明会被提升到当前作用域的最前面。

变量提升

在js中,通过var声明的变量,无论在何处申明,都会被视为声明于所在函数的顶部(如果不在函数内,则视为全局作用域顶部)。申明会提升,初始化不会提升。
例如:当我们多带带执行console.log(a)时,代码会产生异常,因为a没有定义。

但是在后面加上var a = 123,执行结果输出undefined

js执行分两个步骤:

编译(词法解释/预解释)

执行

这里起作用的就是变量提升,编译后的代码相当于

为什么输出的不是123呢?因为初始化不会提升,所以a = "123" 不会提升至顶部。
注意的是,这里的声明都是通过var申明的。使用letconst声明的变量,在达到声明处之前都是无法访问的,试图访问会导致一个引用错误。

letconst必需先申明再引用,并且只会作用于当前代码块内部(函数内部、大括号内部、for循环内部)。通常建议变量申明优先使用const,然后再使用let

函数提升

function函数声明会被提升到当前作用域 的最前面。例如,在下面例子中test函数被提升至顶部:

但对于通过表达式申明的函数不会提升,如下:

test变量提升了,但初始化不会提升。

资料:《深入理解ES6》第一章

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101965.html

相关文章

  • Js基础知识(三) - 作用域与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    lemanli 评论0 收藏0
  • Js基础知识(三) - 作用域与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    XFLY 评论0 收藏0
  • Js基础知识(三) - 作用域与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    tanglijun 评论0 收藏0
  • Js基础知识(三) - 作用域与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    lmxdawn 评论0 收藏0

发表评论

0条评论

wangbjun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<