变量提升
在js中,通过var
声明的变量,无论在何处申明,都会被视为声明于所在函数的顶部(如果不在函数内,则视为全局作用域顶部)。申明会提升,初始化不会提升。
console.log(a)
时,代码会产生异常,因为a没有定义。但是在后面加上var a = 123
,执行结果输出undefined
js执行分两个步骤: - 编译(词法解释/预解释)
- 执行
这里起作用的就是变量提升,编译后的代码相当于
为什么输出的不是123呢?因为初始化不会提升,所以a = '123' 不会提升至顶部。注意的是,这里的声明都是通过var
申明的。使用let
或const
声明的变量,在达到声明处之前都是无法访问的,试图访问会导致一个引用错误。let
与 const
必需先申明再引用,并且只会作用于当前代码块内部(函数内部、大括号内部、for循环内部)。通常建议变量申明优先使用const
,然后再使用let
函数提升
function
函数声明会被提升到当前作用域 的最前面。例如,在下面例子中test函数被提升至顶部:
资料:《深入理解ES6》第一章