JavaScript 中的Hoisting是什么?

2023-10-23 09:57:23 浏览数 (1)

在JavaScript中,Hoisting(变量提升)是指在代码执行之前,JavaScript引擎将变量和函数的声明提升到当前作用域的顶部的行为。

具体来说,JavaScript引擎在执行代码之前会进行两个步骤:编译阶段和执行阶段。在编译阶段,JavaScript引擎会将变量声明和函数声明提升到当前作用域的顶部。这意味着可以在声明之前使用这些变量或函数,而不会引发错误。

变量提升的过程包括两种情况:

1:变量声明提升:JavaScript中使用var关键字声明的变量会被提升到其所在作用域的顶部。这意味着可以在变量声明之前使用变量,并且变量的值会是undefined。(只会声明,不会赋值。)

代码语言:javascript复制
console.log(x); // 输出 undefined
var x = 10;

上述代码在执行时会被解释为以下形式:

代码语言:javascript复制
var x;
console.log(x); // 输出 undefined
x = 10;

在这个例子中,变量 x 被提升到范围的顶部,但它的赋值 10 没有,所以当我们尝试记录 x 的值时,它返回 undefined。

2:函数声明提升:使用函数声明语法定义的函数会被整体提升到当前作用域的顶部,因此可以在函数声明之前调用这个函数。

代码语言:javascript复制
sayHello(); // 输出 "Hello"
function sayHello() {
  console.log("Hello");
}

上述代码在执行时会被解释为以下形式:

代码语言:javascript复制
function sayHello() {
  console.log("Hello");
}
sayHello(); // 输出 "Hello"

需要注意的是,只有函数声明会被提升,而函数表达式(使用var、let或const关键字定义的函数)不会被提升。

尽管变量和函数的声明会被提升,但是它们的赋值操作不会被提升。因此,在变量声明之前使用变量时,变量的值会是undefined

0 人点赞