JavaScript 基礎

什麼是提升 (Hoisting)?

AI 練習作答

什麼是提升(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 的提升(暫時性死區)

letconst 也會被提升,但在宣告前存取會拋出 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 評分