我试图理解 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
> 在那里未定义,分配的值不会通过变量声明的方式设置为未定义
。因此,该行被忽略并打印函数引用的原始
值。
为了您更好地理解,一个简单的例子是,
function x(){ };
var x;
console.log(x); //function x(){ }
关于JavaScript 提升同一变量的多个声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246543/