1,異步(什么是異步固阁,異步出現(xiàn)的原因壤躲,?異步解決的問題,如何實現(xiàn)異步备燃,什么時候需要異步模式碉克。)
JavaScript是順序執(zhí)行的函數(shù),同一個js文件中的函數(shù)不可能同時執(zhí)行并齐,函數(shù)執(zhí)行時間的先后導致異步(現(xiàn)在和未來)漏麦。????????????????異步的實現(xiàn)方式:回調(diào)函數(shù)----> Promise ---->Generator生成器函數(shù)
2,回調(diào)函數(shù)
回調(diào)函數(shù)是異步的基本單元况褪,setTimeout是最常見的回調(diào)函數(shù)撕贞,JavaScript允許函數(shù)作為參數(shù)使用,這為回調(diào)函數(shù)的定義和使用提供了一定的便利测垛∧笈颍回調(diào)出現(xiàn)的問題:控制反轉(zhuǎn),調(diào)用第三方(自己寫的或者別人寫的)API食侮,執(zhí)行第三方API的流程号涯,執(zhí)行過程不可控。
控制反轉(zhuǎn)(inversion of control)锯七,也就是把自己程序一部分的執(zhí)行控制交給某個第三方链快。在你的代碼和第三方工具(一組你希望有人維護的東西)之間有一份并沒有明確表達的契約。
3起胰,Promise (定義久又,相對回調(diào)解決的問題以及怎么解決的,優(yōu)點特點效五,)
JavaScript是單線程語言地消,現(xiàn)在執(zhí)行和將來執(zhí)行導致異步∥费“將來一定會執(zhí)行”的對象為Promise脉执,也可以理解為包含信任的回調(diào)函數(shù)。Promise.resolve(...)傳入非Promise戒劫、非thenable的值半夷,返回一個以傳入值填充的Promise對象。該方法很好的解決了Promise的信任問題迅细。
THENABLE:識別 Promise(或者行為類似于 Promise 的東西)就是定義某種稱為 thenable 的東西巫橄,將其定義為任何具有 then(..) 方法的對象和函數(shù)。我們認為茵典,任何這樣的值就是Promise 一致的 thenable湘换。
4,Generator生成器函數(shù)(iterator以及兩者間關系统阿,生成器函數(shù)定義彩倚,與一般函數(shù)的區(qū)別,)
iterator(遍歷器扶平、迭代器):為不同的數(shù)據(jù)結構添加iterator后帆离,即可依次處理該數(shù)據(jù)結構的所有成員。將iterator看作一種機制(接口)更利于理解结澄,為各種數(shù)據(jù)結構提供接口哥谷,使得數(shù)據(jù)結構的成員能夠順序排列,利于ES6遍歷命令for......of遍歷麻献。
Generator函數(shù)總是返回一個遍歷器對象呼巷,ES6規(guī)定這個遍歷器是Generator函數(shù)的實例,并繼承Generator函數(shù)的Prototype對象的方法赎瑰。
Generator函數(shù)保留一般函數(shù)的屬性與方法定義方式看王悍,在函數(shù)名前加*以區(qū)別一般函數(shù),函數(shù)內(nèi)部使用yield表達式餐曼。
function* generator() {? ? yeild func1();? ??yeild func2();?}