Jump to:

提升(Hoisting)是您在ECMAScript® 2015 Language Specification中找不到的專有名詞。他是一種用來釐清JaveScript執行階段內文如何運行的思路(特別是於創建和執行階段)。提升可能會引起誤解。例如,提升看起來是單純將變數和函數的宣告移動到您編寫的程式區塊頂端,但事情並非如此。變數和函數的宣告會在編譯階段中被放入記憶體,但實際位置和程式碼中完全一樣。

了解更多

技術範例

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

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

catName("Tigger");
/*
上面程式的結果是: "My cat's name is Tigger"
*/

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

catName("Chloe");

function catName(name) {
  console.log("My cat's name is " + name);
}
/*
上面程式的結果是: "My cat's name is Chloe"
*/

即使我們先在此函數撰寫之前的程式碼中使用此函數,程式碼仍然可以運作。
這就是內文在JavaScript中運行的方式。

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

技術範例

num = 6;
num + 7;
var num; 
/* 只要 num 有被宣告,就不會有錯誤 */

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

var x = 1; // 初始化 x
console.log(x + " " + y);  // '1 undefined'
var y = 2;
//上下的程式結果都一樣

var x = 1; // 初始化 x
var y; // 宣告 y
console.log(x + " " + y);  // '1 undefined'
y = 2; // 初始化 y

 

 

技術參考

文件標籤與貢獻者

 此頁面的貢獻者: Julia-H, jsgao0, Daisord
 最近更新: Julia-H,