JavaScript提升同一变量的多个声明

时间:2016-03-27 10:55:41

标签: javascript hoisting

我试图理解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吗?

1 个答案:

答案 0 :(得分: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(){  }