上面的例子中,incrementBySeven和incrementByTen是常量,但是這些常量指向的閉包仍然可以增加其捕獲的變量值。 這是因?yàn)楹瘮?shù)和閉包都是引用類型。
無(wú)論您將函數(shù)/閉包賦值給一個(gè)常量還是變量,您實(shí)際上都是將常量/變量的值設(shè)置為對(duì)應(yīng)函數(shù)/閉包的引用。 上面的例子中,incrementByTen指向閉包的引用是一個(gè)常量,而并非閉包內(nèi)容本身。
這也意味著如果您將閉包賦值給了兩個(gè)不同的常量/變量,兩個(gè)值都會(huì)指向同一個(gè)閉包:
let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// 返回的值為50