- 筆者認為 Scala 的閉包是一種介于全局變量和函數(shù)局部私有變量之間的數(shù)據(jù)訪問機制
- 閉包是一個函數(shù)與其相關(guān)的引用環(huán)境組合的一個整體
- 閉包中引用的環(huán)境變量是私有的不會被外部環(huán)境所更改,但是看起來又仿佛是全局性的,每次調(diào)用都能訪問到只壳,內(nèi)存并不會被釋放掉
object closure{
def main(args: Array[String]): Unit = {
var x = 10
val f = plus(x)
println(f(10))
x = 20
println(f(10)) //結(jié)果還是輸出20
}
def plus(x:Int):Int=>Int = {
(y:Int)=>x + y
}
}
上面這段代碼很能說明問題爹脾,即使外部 x 變量的值發(fā)生了更改温圆,但是閉包函數(shù)的輸出值還是沒有發(fā)生變化, 說明這個閉包變量已經(jīng)跟外部變量割斷聯(lián)系了趋急,但函數(shù)運行結(jié)束也不會釋放掉蒋川,就好像固化在了某個地方一樣