[Medium] 📄 Hoisting
1. What's Hoisting ?
JS 的運行可以拆解為兩階段,分別是創造與執行:
var name = 'Pitt';
console.log(name); // print Pitt
在 Hoisting 特性下,上面這段程式實際運作上,需要理解為先宣告變數再執行賦值。
// create
var name;
// execute
name = 'Pitt';
console.log(name);
而 function 又和變數不同,在創造階段就會指給記憶體,陳述式如下:
getName();
function getName() {
console.log('string'); // print string
}
上面這段之所以能正常運行印出 console.log,而不會報錯,在於以下邏輯,function 先被提升到最上方,接著才做呼叫 function 的動作。
// create
function getName() {
console.log('string');
}
// execute
getName();
但需要注意的是,這種 Hoisting 特性,在表達式時需要注意撰寫順序。
在創造階段時,function 是最優先的,其次才是變數。
Correct
name = 'Yumy';
console.log(name); // print Yumy
var name;
// --- Equal to ---
// create
var name;
// execute
name = 'Yumy';
console.log(name); // print Yumy