变量提升

2024-04-19 20:51:00

变量提升(Variable Hoisting)是 JavaScript 中的一种特性,它指的是在代码执行阶段,JavaScript 引擎会将变量的声明(但不包括赋值)提升到作用域的顶部。这意味着可以在变量声明之前就访问这些变量,但在赋值之前访问它们会得到 undefined

变量提升适用于使用 var 关键字声明的变量,而不适用于使用 letconst 关键字声明的变量。具体来说,JavaScript 引擎在执行代码时会执行以下步骤:

  1. 声明阶段(Declaration Phase):在当前作用域内找到所有使用 var 关键字声明的变量,并将它们的声明提升到作用域的顶部。这意味着变量的名称可以在其实际声明之前被访问。
  2. 初始化阶段(Initialization Phase):如果变量在声明时被赋予了初始值,这个值会在代码执行到达变量声明之前被分配给变量。如果变量声明时没有初始值,则变量会被默认赋值为 undefined

例如,下面的代码展示了变量提升的效果:

console.log(x); // 输出:undefined
var x = 10;
console.log(x); // 输出:10

上面的代码中,虽然在第一行尝试访问变量 x,但由于 x 的声明被提升到了作用域的顶部,因此不会报错,而是输出 undefined。在第二行赋值后,x 的值变为10。

需要注意的是,变量提升仅提升了变量的声明,而不是赋值。因此,在变量声明之前访问这些变量会得到 undefined。此外,变量提升只适用于当前作用域内的变量,如果变量是在函数内部声明的,则它的提升范围仅限于该函数内部。

表情
Ctrl + Enter