用于同一变量的多个声明的JavaScript
我试图理解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(
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,那么它们将被忽略。已分配的值不会通过变量声明替换为未定义的值。