【问题标题】:JavaScript hoisting for multiple declarations of the same variable同一变量的多个声明的 JavaScript 提升
【发布时间】:2016-07-14 18:42:57
【问题描述】:

我试图了解 JavaScript 提升,据我了解,在执行代码之前为所有变量声明留出了内存空间。

我想了解解释器如何通过提升在同一变量的多个声明的情况下工作。考虑以下代码:

 console.log(a);

 //first declaration
 function a() {
     console.log('hello');
 }

 //second declaration
 var a = 2;

输出是函数声明:

function a() {
    console.log('hello');
}

所以,我假设解释器遇到的第一个声明是存储在内存中的声明。但是,将声明的顺序更改为:

console.log(a);

//first declaration
 var a = 2;

//second declaration
function a() {
    console.log('hello');
}

结果相同!解释器忽略第一个声明并将第二个声明存储在内存中。为什么会这样?第二种情况的输出不应该是undefined吗?

【问题讨论】:

    标签: javascript hoisting


    【解决方案1】:

    您的代码将被解释器读取,如下所示,

     function a() {
         console.log('hello');
     }
     var a;
     console.log(a);
     a = 2;
    

    所以在执行上述代码时,a 将首先引用该函数,然后将执行 var a; 行,因为 a 在那里未定义,分配的值将不会通过 undefined 设置变量声明的方式。因此,该行被忽略并打印函数引用的primitive 值。

    一个简单的例子可以让你更好地理解,

    function x(){  };
    var x;
    console.log(x); //function x(){  }
    

    【讨论】:

    • 所以如果他们试图将已经分配的值设置为未定义,则忽略后续的多个声明?
    • @TarunDugar 是的。已经分配的值不会通过变量声明被 undefined 替换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多