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