1. 程式人生 > 實用技巧 >非同步與同步簡析

非同步與同步簡析

非同步與同步

概念

非同步任務相當於現實生活中的同步,在日常生活中,我們要燒水,可以在燒水的時候煮飯做菜。等水開了,再去灌水(後面這句是回撥)
同步任務則是,必須完成這件事,才能做下一件事,這件事做不完,就做不了下一件事。比如,你還沒寫完作業,而恰巧你的小夥伴來找你完,你的父母就和你說,寫完作業才能出去玩。那能怎麼辦呢,只能先寫完作業,才能出去玩。
還有一個例子,就是打遊戲通關,這個遊戲通過了第一關才能打第二關,這就是同步。
開了個會員,第一關沒通過,就先通其它關,之後再回來通第一關,這就是非同步。

同步非同步的區分

記住,定時器(setTimeOut),網路請求(ajax),事件監聽(addEventListener)都是非同步的
ajax雖然可以改寫成同步的,但禁止使用

回撥

例子

function f1(){}
function f2(){
     fn()
}
f2(f1)
分析:
      1. 我沒有呼叫f1
      2. 我把f1傳給了f2
      3. f2呼叫了f1
      4. f1是我寫給f2呼叫的函式
結論:f1是回撥

非同步與回撥的關係

  1. 非同步任務需要用到回撥函式來通知結果
  2. 回撥函式不一定只用在非同步任務裡,也可用於同步任務,比如arr.forEach(i => console.log(i))就是同步回撥

注意:
每個函式都有return,有的沒寫return,就預設返回undefined