×

hoisting 变量提升 JavaScript 引擎

Hoisting:JavaScript 中的变量提升机制

美国 美国 发表于2023-06-30 22:27:03 浏览64 评论0

抢沙发发表评论

什么是 Hoisting

Hoisting(变量提升)是 JavaScript 中一个重要的概念,指的是在代码执行之前,JavaScript 引擎会将变量和函数的声明部分提升到其作用域的顶部。这意味着你可以在声明之前使用这些变量或函数,而不会报错。

变量提升机制

在 JavaScript 中,使用关键字 var 声明的变量会被提升至其作用域的顶部。例如:

```javascript

console.log(x); // 输出 undefined

var x = 5;

```

上面的代码中,即使在声明之前使用了变量 x,也不会抛出错误。这是因为 JavaScript 引擎会将变量声明提升至作用域的顶部,并将其初始值设为 undefined。在第一行代码执行时,变量 x 已经存在,但它的值为 undefined。当 var x = 5 执行时,变量 x 的值被赋为 5。

需要注意的是,只有声明会被提升,而不包括初始化。例如:

console.log(y); // 输出 undefined

var y;

y = 10;

上述代码中,变量 y 在声明之后才进行了初始化赋值。在第一行代码执行时,虽然变量 y 已经存在,但它的值仍为 undefined。直到第三行代码执行时,变量 y 的值才被赋为 10。

函数提升

与变量提升类似,使用关键字 function 声明的函数也会被提升至其作用域的顶部。例如:

foo(); // 输出 "Hello"

function foo() {

console.log("Hello");

}

上述代码中,在函数声明之前调用了函数 foo,而不会报错。这是因为 JavaScript 引擎在执行代码之前会将函数声明提升到作用域的顶部。即使在声明之前调用了函数,也是有效的。

需要注意的是,只有函数声明才会被提升,而不包括函数表达式。例如:

bar(); // 抛出 TypeError: bar is not a function

var bar = function() {

console.log("World");

};

上述代码中,变量 bar 被提升至作用域的顶部,但由于它是一个函数表达式而不是函数声明,所以在调用之前会抛出 TypeError 错误。

Hoisting 的翻译

Hoisting 这个词可以翻译为“变量提升”或“变量声明提升”。在 JavaScript 开发者社区中,通常使用这两个翻译方式来描述该概念。

Hoisting 是 JavaScript 中的一个重要概念,指的是在代码执行之前,变量和函数的声明部分会被提升至作用域的顶部。这使得我们可以在声明之前使用这些变量和函数,而不会报错。但需要注意的是,只有声明会被提升,而不包括初始化。

以上关于hoisting的内容由留师傅留学网编辑精心编辑