什么是閉包? 有什么作用
- 因為js只存在局部變量和全局變量,函數(shù)內(nèi)部可以訪問外部變量,而外部卻不能訪問局部變量。閉包就是函數(shù)內(nèi)部在嵌套子函數(shù),這樣子函數(shù)就可以使用父級函數(shù)定義的變量,然后通過return或者定義全局變量的方式把子函數(shù)傳遞出去 ,這樣就可以通過某些方法在外部操作內(nèi)部子函數(shù)。
- 這樣做的好處可以獨立命名空間不用擔(dān)心變量同名覆蓋的問題
- 保存私有變量,父級函數(shù)就算執(zhí)行完之后閉包的存在js引擎不會將其內(nèi)部定義的變量銷毀,因為外部需要操作內(nèi)部子函數(shù)的時候,還得需要依賴父級函數(shù)定義的變量。
setTimeout 0 有什么作用
-
通過設(shè)置延遲時間為0實現(xiàn)js異步,讓該語句后面的語句先執(zhí)行再執(zhí)行本身。因為js是單線程處理任務(wù),把每個任務(wù)放在隊列中,前面的任務(wù)完成之后才會開始后一個,設(shè)置setTimeout 0 讓內(nèi)部的函數(shù)立即插入隊列中但不執(zhí)行,需要等腳本的同步任務(wù)(或者任務(wù)隊列中已有的事件)一結(jié)束就立即執(zhí)行,起到一個盡早執(zhí)行指定任務(wù)的作用。
console.log(1); setTimeout("console.log(2)", 0); console.log(3); //先輸出1 然后3 最后才是2
本文章著作權(quán)歸沒夢想的咸魚丶和饑人谷所有,轉(zhuǎn)載須說明來源