閉包是什麼?
電腦科學中,閉包(英文:Closure),又稱詞法閉包(Lexical Closure)或函數閉包(function closures),是引用了自由變數的函數。這個被引用的自由變數將會和這個函數一同存在,即使已經離開了創造它的環境也不例外。
所以,有另一種說法認為閉包是由函數和與其相關的引用環境組合而成的實體。閉包在運行時可以有多個實例,不同的引用環境和相同的函數組合可以產生不同的實例。
閉包的概念出現在60年代,最早實作閉包的程式語言是Scheme。之後,閉包被廣泛使用於函數式程式語言如ML語言和LISP。很多命令式程式語言也開始支援閉包。
在某些語言中,在函數中可以(巢狀)定義另一個函數時,如果內部的函數引用了外部的函數的變量,則可能產生閉包。運行時,一旦外部的 函數被執行,一個閉包就形成了,閉包中包含了內部函數的程式碼,以及所需外部函數中的變數的參考。其中所引用的變數稱作上值(upvalue)。
閉包一詞經常和匿名函數混淆。這可能是因為兩者經常同時使用,但是它們是不同的概念。
以上是閉包是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!