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