变量提升与函数提升
1 | function outter () { |
变量提升和函数提升指的是JS预编译的一个操作。
首先对于var
声明的变量,只存在全局作用域和函数作用域,不像let
和const
还有块作用域。
- 变量提升(指
var
声明的变量)指的是作用域内出现的变量声明会把声明放到作用域的开头 - 函数提升是指除了1外的操作,还会把函数提前赋值给变量
根据上面两个规则,上面的代码经预编译会变成如下形式:1
2
3
4
5
6function outter () {
var inner;
inner = function inner() {}
return inner;
inner = 9;
}