閉包是支持一等函數(shù)的編程語言(Python、JavaScript等)中實(shí)現(xiàn)詞法綁定的一種技術(shù)。
當(dāng)捕捉閉包的時(shí)候,它的自由變量(在函數(shù)外部定義但在函數(shù)內(nèi)部使用的變量)會在捕捉時(shí)被確定,這樣即便脫離了捕捉時(shí)的上下文,它也能照常運(yùn)行。簡單的說,可以將閉包理解為能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
正在情況下,函數(shù)的局部變量在函數(shù)調(diào)用結(jié)束之后就結(jié)束了生命周期,但是閉包使得局部變量的生命周期得到了延展。使用閉包的時(shí)候需要注意,閉包會使得函數(shù)中創(chuàng)建的對象不會被垃圾回收,可能會導(dǎo)致很大的內(nèi)存開銷,所以閉包一定不能濫用。