一:JS事件循環(huán)
1:同步調(diào)用
同步調(diào)用是一種阻塞式調(diào)用,調(diào)用要等待雙方執(zhí)行完畢才返回,他是一種單向調(diào)用。
2:回調(diào)
回調(diào)是一種雙向調(diào)用模式,也就是說(shuō),被調(diào)用方在接口被調(diào)用時(shí)也會(huì)調(diào)用對(duì)方的接口。
3:異步調(diào)用
異步調(diào)用是一種類(lèi)似消息或事件的機(jī)制,不過(guò)它的調(diào)用方向剛好相反,接口的服務(wù)在收到某種訊息或發(fā)生某種事件時(shí),會(huì)主動(dòng)通知客戶(hù)方,比如瀏覽器點(diǎn)擊事件中,用戶(hù)點(diǎn)擊后,會(huì)調(diào)用JS中的回調(diào)函數(shù)。
異步的實(shí)現(xiàn)原理:
首先左上角的Call stack(調(diào)用棧)會(huì)把代碼一行一行的執(zhí)行,遇到addEVentListener,也就是事件,那么它不會(huì)執(zhí)行,會(huì)托管在implementation-specific(可以理解為瀏覽器)中,右上角的implementation-specific會(huì)把這個(gè)事件記下來(lái),當(dāng)有人點(diǎn)擊時(shí),那么它會(huì)load成一個(gè)消息存放在右下角的message queue中,然后Event Loop(事件循環(huán))會(huì)一直在那里循環(huán),查看message queue中的消息,有消息,就把它扔回調(diào)用棧,然后執(zhí)行call back的事件。
二:ES6
阮大大的《ECMAScript入門(mén)》 http://es6.ruanyifeng.com/
1: promise
new Promise((resolve, reject) => { console.log('begin promise') setTimeout(resolve, 1000) }).then(() => { console.log('over') })
這個(gè)是非常簡(jiǎn)單的代碼,先new promise傳入2個(gè)參數(shù),resolve代表成功會(huì)怎么樣,reject代表失敗會(huì)怎么樣,上面的代碼的意思是先輸出'begin promise'resolve成功后1秒后輸出'over'。then()的意思是resolve之后立即執(zhí)行。
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式