function saveMoney(newSaving = 0) {
var myAccount = 20000
return function () {
return myAccount + newSaving;
}
}
total = saveMoney(1000)
total()
在線上學習網站第一次看到這個寫法覺得很神奇,卻不知道他就是所謂鼎鼎大名的閉包(Closure)。
思考:
什麼是閉包?看 code ,是由兩個函式構成的,而且互為表裡。
前面的文章曾經提到過, JS 用 function 去界定變數名稱的作用範圍,當我們用把一個函式用另一個包起來,便會形成一個封閉的空間。而裡面的變數名稱,也只在範圍內可以使用,我們稱為private變數。使用它,來達到隱藏資訊的效果。
再看一個累加的例子
function accumulation(number = 0){
return function(){
console.log( number++ )
}
}
var total = accumulation()
total() // 0
total() // 1
total() // 2
為什麼 number 會一直累加上去,而不是因為每次執行而開始重新計算,這便是閉包達到的效果。藉由雙層函示的架構,將 number 變數存在記憶體當中,並藉由 accumulation 去執行裡面的匿名函式去改變值。
閉包博大精深,網路上有很多不同的資訊,但基本的 function 產生作用域,用雙層 function 去達到封閉作用空間,是我對閉包基本認知。