非同步與同步簡析
阿新 • • 發佈:2020-12-17
非同步與同步
概念
非同步任務相當於現實生活中的同步,在日常生活中,我們要燒水,可以在燒水的時候煮飯做菜。等水開了,再去灌水(後面這句是回撥)
同步任務則是,必須完成這件事,才能做下一件事,這件事做不完,就做不了下一件事。比如,你還沒寫完作業,而恰巧你的小夥伴來找你完,你的父母就和你說,寫完作業才能出去玩。那能怎麼辦呢,只能先寫完作業,才能出去玩。
還有一個例子,就是打遊戲通關,這個遊戲通過了第一關才能打第二關,這就是同步。
開了個會員,第一關沒通過,就先通其它關,之後再回來通第一關,這就是非同步。
同步非同步的區分
記住,定時器(setTimeOut),網路請求(ajax),事件監聽(addEventListener)都是非同步的
ajax雖然可以改寫成同步的,但禁止使用
回撥
例子
function f1(){}
function f2(){
fn()
}
f2(f1)
分析:
1. 我沒有呼叫f1
2. 我把f1傳給了f2
3. f2呼叫了f1
4. f1是我寫給f2呼叫的函式
結論:f1是回撥
非同步與回撥的關係
- 非同步任務需要用到回撥函式來通知結果
- 回撥函式不一定只用在非同步任務裡,也可用於同步任務,比如arr.forEach(i => console.log(i))就是同步回撥
注意:
每個函式都有return,有的沒寫return,就預設返回undefined