提升(Hoisting)

翻譯不完整。請協助 翻譯此英文文件

提升是您在 JavaScript 文檔中找不到的項目。提升是在 JavaScript 中需要思考程式片段的前後關係(特別是於創建和執行階段)通常是如何進行的地方,而且,提升可能會引起誤解。例如,提升使變數和函數的宣告被移動到您編寫的程式區塊頂端,但這並非發生於您編寫程式時,此發生於編譯階段,變數和函數的宣告提升會於放入記憶體中時處理,但在您編寫的程式碼中,仍然保留於您所鍵入的位置。

了解更多

技術範例

在執行任何程式碼片段之前,JavaScript 將函數宣告放入記憶體中的優點之一是,您可以在程式碼宣告該函數之前使用該函數。例如:

function catName(name) {
  console.log("My cat's name is " + name);
}

catName("Tigger");
/*
The result of the code above is: "My cat's name is Tigger"
*/

上面的程式碼片段是你希望編寫以使其運作的方式。現在,我們來看看當我們寫這個函數之前,執行這個函數會發生什麼事:

catName("Chloe");

function catName(name) {
  console.log("My cat's name is " + name);
}
/*
The result of the code above is: "My cat's name is Chloe"
*/

即使我們先在此函數撰寫之前的程式碼中使用此函數,程式碼仍然可以運作。這是因為此函數被提升至此程式碼片段頂端的位置,影響了所撰寫的 JavaScript 程式片段的前後關係。

提升也適用於其他資料類型和變數。變數可以在宣告之前進行初始化和使用。但是如果沒有初始化,就不能使用它們。

技術範例

num = 6;
num + 7;
var num; 
/* gives no errors as long as num is declared*/

JavaScript 僅提升宣告的部分,而不是初始化。如果您於使用此變數後才宣告和初始化此變數,那麼該值將是 undefined。 以下兩個範例顯示了此特性。

var x = 1; // Initialize x
console.log(x + " " + y);  //y is undefined
var y = 2;
//the above code and the below code are the same

var x = 1; // Initialize x
var y; // Declare y
console.log(x + " " + y);  //y is undefined
y = 2; // Initialize y

 

 

技術參考

文件標籤與貢獻者

標籤: 
 此頁面的貢獻者: Daisord
 最近更新: Daisord,