FE Interview Hub
JavaScript基礎

什麼是閉包 (Closure)?

AI 練習作答

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 變數,這就是閉包。

常見應用場景

  1. 資料私有化(封裝):利用閉包模擬私有變數,避免外部直接存取
function createCounter() {
  let count = 0
  return {
    increment() { count++ },
    getCount() { return count }
  }
}

const counter = createCounter()
counter.increment()
counter.getCount() // 1
// count 無法從外部直接存取
  1. 函式工廠:根據參數產生不同行為的函式
function multiplier(factor) {
  return (num) => num * factor
}

const double = multiplier(2)
const triple = multiplier(3)
double(5) // 10
triple(5) // 15
  1. 防抖 / 節流:透過閉包保存計時器 ID
function debounce(fn, delay) {
  let timer
  return function (...args) {
    clearTimeout(timer)
    timer = setTimeout(() => fn.apply(this, args), delay)
  }
}

注意事項

  • 閉包會保留對外層變數的參考,而非複製值,因此外層變數改變時,閉包內也會反映最新值
  • 過度使用閉包可能造成記憶體洩漏,因為被閉包引用的變數無法被垃圾回收

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分