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