JavaScript 声明提升
JavaScript 声明提升
首先 JS 在执行之前会有一个预编译过程,变量提升和函数提升就是发生在这里。
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
声明提升(hoisting):函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
JavaScript 初始化不会提升
JavaScript 只有声明的变量会提升,初始化的不会。
在头部声明变量
JavaScript 严格模式(strict mode)不允许使用未声明的变量。
|
使用匿名函数的方式: 声明:
调用:
|
注意:使用匿名函数的方式不存在函数提升,因为函数名称使用变量表示的,只存在变量提升。
注意:函数优先,虽然函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量。
变量的声明和函数的声明提升,提升的时机发生在预解析过程中。
预解析过程也就是创建 AO(Activation Object) 的过程。
创建AO过程:
- 创建 AO 对象。
- 将形参和函数内变量声明作为对象的属性名,属性值统一为 undefined。
- 将实参赋值给形参。
- 找函数内的函数声明作为对象的属性名,属性值为函数体。

浙公网安备 33010602011771号