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 解析步骤,也是我们平时的写法,利于理解,不会出错。
网友评论