JavaScript基礎
什麼是閉包 (Closure)?
a## 什麼是閉包(Closure)?
閉包是指一個函式能夠「記住」並存取其**詞法作用域(Lexical Scope)**中的變數,即使該函式已在其原始作用域之外執行。
簡單來說:閉包 = 函式 + 其定義時所在的作用域環境。
基本範例
function outer() {
const message = 'Hello'
function inner() {
console.log(message) // 可以存取外層的 message
}
return inner
}
const greet = outer()
greet() // 'Hello'
inner 函式被回傳後,outer 已執行完畢,但 inner 仍然「記住」了 message 變數,這就是閉包。
常見應用場景
- 資料私有化(封裝):利用閉包模擬私有變數,避免外部直接存取
function createCounter() {
let count = 0
return {
increment() { count++ },
getCount() { return count }
}
}
const counter = createCounter()
counter.increment()
counter.getCount() // 1
// count 無法從外部直接存取
- 函式工廠:根據參數產生不同行為的函式
function multiplier(factor) {
return (num) => num * factor
}
const double = multiplier(2)
const triple = multiplier(3)
double(5) // 10
triple(5) // 15
- 防抖 / 節流:透過閉包保存計時器 ID
function debounce(fn, delay) {
let timer
return function (...args) {
clearTimeout(timer)
timer = setTimeout(() => fn.apply(this, args), delay)
}
}
注意事項
- 閉包會保留對外層變數的參考,而非複製值,因此外層變數改變時,閉包內也會反映最新值
- 過度使用閉包可能造成記憶體洩漏,因為被閉包引用的變數無法被垃圾回收
✦ AI 模擬面試
輸入你的答案,AI 即時分析精準度與改進空間
登入後即可使用 AI 評分
