JavaScript 基礎
什麼是提升 (Hoisting)?
什麼是提升(Hoisting)?
Hoisting 是 JavaScript 引擎在執行程式碼之前,將變數宣告和函式宣告移至其所在作用域頂部的行為。
var 的提升
var 宣告會被提升,但初始化不會:
console.log(a); // undefined(不報錯)
var a = 5;
console.log(a); // 5
// 等同於:
var a; // 提升到頂部
console.log(a); // undefined
a = 5;
console.log(a); // 5
let 和 const 的提升(暫時性死區)
let 和 const 也會被提升,但在宣告前存取會拋出 ReferenceError,這個範圍稱為暫時性死區(TDZ, Temporal Dead Zone):
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 10;
函式宣告的提升
函式宣告(Function Declaration)會被完整提升(包括函式本體):
foo(); // ✅ 'Hello'(可在宣告前呼叫)
function foo() {
console.log('Hello');
}
函式表達式不提升
bar(); // ❌ TypeError: bar is not a function
var bar = function() {
console.log('World');
};
總結
| 宣告方式 | 提升 | 初始值 | TDZ |
|---|---|---|---|
var |
✅ | undefined |
❌ |
let |
✅ | 未初始化 | ✅ |
const |
✅ | 未初始化 | ✅ |
| 函式宣告 | ✅ | 完整函式 | ❌ |
| 函式表達式 | 只提升變數 | undefined |
— |
✦ AI 模擬面試
輸入你的答案,AI 即時分析精準度與改進空間
登入後即可使用 AI 評分
