2.3 closure

閉包 (Closure) 是一種特殊的函式,他能夠存取被宣告當下的環境中的變數。

function makeFunc() {
  let name = "John"
  displayName() {
    console.log(name)
  }
  return displayName
}

let func1 = makeFunc()
func1()

答案是"John"

為什麼呢?

明明makeFunc()已經結束執行並回傳了,name卻沒有跟著消失呢?

原因跟以下特性有關

在JavaScript中,即使在外層區塊已經回傳的狀況下,只要內層區塊還保留著一份參考,那麽外層的變數不會隨著回傳而消失,我們依然可以存取外層的變數。

當你看到一個 function 內 return 了另一個 function,通常就是有用到閉包的概念

閉包的用意在於 :避免增加全域變數,但又能取得區域變數的值。

範例:

function buy() {
  let wallet = 1000;
  const displayMoney = (price) =>{
    return wallet -= price;
  }
  return displayName
}

let B = buy()
console.log(B(100)) // 900
console.log(B(100)) // 800
console.log(B(100)) // 700
console.log(B(100)) // 600

Last updated