在 JavaScript 中提升变量

IT技术 javascript
2021-03-21 08:43:58

我知道变量的提升是在 Java Script 中完成的。我不明白为什么它输出为 undefined

 do_something()
    {
    var foo = 2;    
    console.log(foo);   
    } do_something()  // it prints 2

 do_something()
     {        
     console.log(foo);  var foo = 2;  
     } do_something()  // it prints undefined

正如 javascript 做提升第二个功能也应该按照我的理解打印 2。为什么不呢

5个回答

这就是解释器如何看待您的代码,

do_something() {
 var foo;
 console.log(foo); // undefined
 foo = 2;
}

do_something();

所以是印刷undefined这是变量提升的基础。您的声明将移至顶部,而您的分配将保留在同一位置。当您使用letover时,情况就不同var

Javascript 只提升声明,而不是初始化。

var x = y, y = 'A';
console.log(x + y); // undefinedA

在这里, x 和 y 在任何代码执行之前声明,赋值发生在后面。"x = y"计算时,y存在所以 noReferenceError被抛出,它的值为'undefined'因此,x被分配了未定义的值。然后,y被赋值为'A'因此,在第一行之后,x === undefined && y === 'A',因此结果。

变量声明

只有声明被提升。分配的变量不会被提升。所以你是

第二个函数输出undefined是因为您调用它之后设置了变量您编写的代码是同步的,这意味着它由解释器逐行读取,按顺序执行。如果在调用之前没有定义变量,控制台会输出undefined.

这篇文章更详细地解释了它。

仅提升声明,对变量的任何赋值始终保留在其最初的位置。