js 函数和变量提升

2021-06-08  本文已影响0人  Vergil_wj

js 中函数和变量的声明都将被提升到函数的最顶部。

我们平时的写法是先声明后使用:

    var y = 7
    console.log(y)

变量的提升则是可以先使用,后声明:

    y = 7
    console.log(y)
    var y

函数的提升:函数可以在声明之前被调用

    //先调用
    myFunction(5)
    //后声明
    function myFunction(y){
      console.log(y * y)
    }

想要理解以上,需要了解hoisting(声明提升)
声明提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

初始化不会提升

    console.log(y)  // undefine
    var y = 7

输出 undefine,这是因为变量var y提升了,但初始化y=7不会提升,所以 y 就是一个未定义的变量。

上面的写法相当于:

    var y
    console.log(y) //undefine
    y = 7

使用函数表达式,也不会得到提升,道理同上。

    b(5)
    var b = function myFunction(y) {
      console.log(y * y)
    }

以上会直接报错:b 不是一个函数。

在头部声明变量

通常情况下还是在作用域开始前就声明这些变量,这是正常的 js 解析步骤,也是我们平时的写法,利于理解,不会出错。

参考

JavaScript 声明提升

上一篇下一篇

猜你喜欢

热点阅读