JavaScript 中的变量提升是指在执行代码之前,变量和函数声明会被提升到当前作用域的顶部。这意味着可以在声明之前使用变量或调用函数,而不会引发错误。

变量提升的规则有一些特殊情况:

1. 变量声明提升:
   使用 var 关键字声明的变量会被提升,但它们的初始化值不会。
   console.log(x); // undefined
   var x = 5;
   console.log(x); // 5

   上述代码在执行时相当于:
   var x;
   console.log(x); // undefined
   x = 5;
   console.log(x); // 5

   这是因为变量声明被提升,但赋值操作仍然保留在原位置。

2. 函数声明提升:
   使用 function 关键字声明的函数会被整体提升。
   sayHello(); // "Hello, world!"
   function sayHello() {
     console.log("Hello, world!");
   }

   上述代码在执行时相当于:
   function sayHello() {
     console.log("Hello, world!");
   }
   sayHello(); // "Hello, world!"

   函数声明整体被提升,因此在声明之前调用函数是允许的。

3. let 和 const 的块级作用域:
   使用 let 和 const 声明的变量也会被提升,但它们存在块级作用域,而不是像 var 那样提升到函数的顶部。
   console.log(x); // ReferenceError: x is not defined
   let x = 5;

   在这种情况下,变量 x 被提升到块级作用域的顶部,但由于暂时性死区(Temporal Dead Zone,TDZ),在声明之前访问变量会导致 ReferenceError。

总体来说,了解变量提升有助于避免在代码中出现意外行为,并更好地理解 JavaScript 中的作用域和执行顺序。


转载请注明出处:http://www.pingtaimeng.com/article/detail/12798/JavaScript