JavaScript 声明提升

JavaScript 声明提升

首先 JS 在执行之前会有一个预编译过程,变量提升和函数提升就是发生在这里。

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

声明提升(hoisting):函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部

JavaScript 初始化不会提升

JavaScript 只有声明的变量会提升,初始化的不会。

在头部声明变量

JavaScript 严格模式(strict mode)不允许使用未声明的变量。

使用匿名函数的方式:

声明:

var 变量名称=function(形参列表){
  //函数体
}

 

调用:

变量名称(实参列表)

注意:使用匿名函数的方式不存在函数提升,因为函数名称使用变量表示的,只存在变量提升。

注意:函数优先,虽然函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量。

 

变量的声明和函数的声明提升,提升的时机发生在预解析过程中。

预解析过程也就是创建 AO(Activation Object) 的过程。

创建AO过程:

  •  创建 AO 对象。
  •  将形参和函数内变量声明作为对象的属性名,属性值统一为 undefined
  •  将实参赋值给形参。
  •  找函数内的函数声明作为对象的属性名,属性值为函数体。
posted @ 2022-07-25 08:51  Rionzii  阅读(85)  评论(0)    收藏  举报