天天看點

閉包 立即執行函數

舉例說明

閉包 立即執行函數

列印結果 101   102       當時疑惑 第一次demo執行完畢 執行期上下文被釋放  第二次應該列印undefiend

錯誤認識   第一次執行完畢 銷毀的執行器上下文 為b函數自己的執行期上下文   但是他無法銷毀  來自于A的執行期上下文

故其列印仍是a函數執行期上下文中  的值   該AO一直為b函數所有    b執行完回歸到b被定義的狀态

閉包概念

當内部函數被儲存到外部時,将會生成閉包。閉包會導緻原有作用域鍊不釋放,造成記憶體洩露

閉包作用

累加器

閉包 立即執行函數

可以做緩存

閉包 立即執行函數

列印出  eating  banana

閉包 立即執行函數

立即執行函數  

定義:此類函數沒有聲明,在一次執行過後即釋放。适合做初始化工作。  主要針對初始化函數

定義形式 

(function abc() {
    ........

}())
           

傳回值直接用變量去接

閉包 立即執行函數
閉包 立即執行函數

這叫函數 聲明  不叫表達式  是以會報文法解析錯誤

閉包 立即執行函數

這個叫做函數 表達式   可以執行

這要将函數聲明變成表達式就可以執行

function test() {
    console.log(12212);

}(1,2,3,4)
           

理論上将絕不可以這楊   但是實際上不報錯    系統識别為 函數聲明 和 (1,2,3,4)兩部分

最常見的閉包現象

閉包 立即執行函數

每一次for循環 将數組每一位指派為一個函數

閉包 立即執行函數

每一個對應的i都儲存在立即執行函數中的j  并且被傳回到外部  此時閉包解決

解決原理  :  立即執行函數   将内部函數儲存到test  AO的數組中     再進一步   儲存到 test函數外部

此時arr數組拿着立即執行函數的勞動成果    j

myarr函數拿着test中arr函數中的   的勞動成果   

閉包 立即執行函數
閉包 立即執行函數

繼續閱讀