【问题标题】:Hoisting variables in JavaScript在 JavaScript 中提升变量
【发布时间】:2016-03-27 10:05:50
【问题描述】:

我了解变量的提升是在 Java 脚本中完成的。我无法理解为什么它输出为未定义

 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.buy 为什么不呢

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这就是解释器看到你的代码的方式,

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

    所以它正在打印undefined。这是变量提升的基础。您的声明将移至顶部,您的分配将保留在原处。当您使用let 而不是var 时,情况就不同了。

    【讨论】:

      【解决方案2】:

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

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

      这里,x 和 y 是在任何代码执行之前声明的,赋值发生在后面。在评估"x = y" 时,y 存在,因此没有抛出ReferenceError,其值为'undefined'。因此,x 被分配了未定义的值。然后,y 被赋值为'A'。因此,在第一行之后,x === undefined && y === 'A',因此是结果。

      Variable Declaration

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          This article explains it in more detail.

          【讨论】:

            【解决方案5】:

            只有声明被提升,任何对变量的赋值总是停留在它原来的位置。

            【讨论】:

              猜你喜欢
              • 2015-06-22
              • 1970-01-01
              • 1970-01-01
              • 2014-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-01-01
              • 1970-01-01
              相关资源
              最近更新 更多