Skip to content
On this page

Closure 閉包

簡單說

讓每個功能相同的 函式,各有獨立的 環境變數 且不互相干擾、影響。

定義

  • 設置 私有環境變數
  • 對外露出 內層函式 操作 私有環境變數
  • 外部無法存取 私有環境變數

方法

  • 建立一個會內部含 回傳函式or 執行函式 的函式
  • 定義外層(第一層)函式的環境變數
  • 操作函式
js
// 定義函式,參數為環境變數 
// (會回傳函式,參數為之後會針對環境變數操作的參數)
function withdraw(userBalance, userName) {
	return function(amount) {
		userBalance = userBalance - amount
		console.log(userBalance, userName)
	}
}

// 定義環境變數
const userA = withdraw(1000, 'A')
const userB = withdraw(500, 'B')

// 操作定義的環境變數
userA(100) // 900 "A"
userB(300) // 200 'B'

更簡潔的寫法:

js
const withdraw = (userBalance, userName) => (amount) => userBalance = userBalance - amount

const userA = withdraw(1000, 'A')
const userB = withdraw(500, 'B')

userA(100) // 900
userB(300) // 200

Reference