Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于同一变量的多个声明的JavaScript_Javascript_Hoisting - Fatal编程技术网

用于同一变量的多个声明的JavaScript

用于同一变量的多个声明的JavaScript,javascript,hoisting,Javascript,Hoisting,我试图理解JavaScript,根据我的理解,在执行代码之前,为所有变量声明留出了内存空间 我想了解在同一变量有多个声明的情况下,解释器是如何通过提升来工作的。考虑下面的代码: console.log(a); //first declaration function a() { console.log('hello'); } //second declaration var a = 2; 输出为函数声明: function a() { console.log(

我试图理解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');
}

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

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

 function a() {
     console.log('hello');
 }
 var a;
 console.log(a);
 a = 2;
因此,在执行上述代码时,
a
将首先引用函数,然后是
var a行将被执行,因为
a
在那里未定义,分配的值不会通过变量声明设置为
undefined
。因此,该行被忽略,并打印函数引用的
原语

一个让你更好理解的简单例子是

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

因此,如果后续的多个声明试图将一个已赋值设置为undefined?@TarunDugar Yeah,那么它们将被忽略。已分配的值不会通过变量声明替换为未定义的值。