[英]JavaScript hoisting for multiple declarations of the same variable
我試圖理解 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
嗎?
您的代碼將被解釋器讀取,如下所示,
function a() {
console.log('hello');
}
var a;
console.log(a);
a = 2;
所以在執行上面的代碼時, a
將首先引用該函數,然后在var a;
line 將被執行,因為a
在那里未定義,因此不會通過變量聲明將分配的值設置為undefined
。 因此,該行被忽略並打印了函數引用的primitive
值。
為了您更好地理解,一個簡單的例子是,
function x(){ };
var x;
console.log(x); //function x(){ }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.