loading...
上次更新: 2023-03-29
簡單來說,就是一次只做一件事情。
會一個任務接著一個任務執行:完成任務A後,再執行任務B,完成任務B後,再執行任務C...。
這會造成執行阻塞,假設任務B需要很長時間處理,那麼執行就會卡在這邊,後面的任務C、D、E必須等到任務B完成後才能執行,浪費許多時間。
非同步則是一次執行好幾件事。
不需要等到前一件事情做完才做下一件事情。假如任務B需要許多時間處理,那麼可以先同時執行C、D、E。
Callback function又稱為回調、回呼函式。
假設我們有幾件事要做:
執行順序會如下:
不同於一般函式會被直接呼叫,我們會把 callback function 當作另一個函式的參數傳入,在另一個函式裡呼叫它。
// 一般函式: 直接調用
showAlert();
// callback: 作為參數
setTimeout(showAlert, 3000);二項 CallBack 的必要條件:
範例:
有以下兩個函式,我們想要先印出 this is task A 再印出 this is task B
function taskA() {
setTimeout(function () {
console.log('this is task A');
}, 3000);
}
function taskB() {
console.log('this is task B');
}若直接呼叫taskA再呼叫taskB
taskA();
taskB();結果會變成:
// 先印出
this is task B
// 三秒後
this is task A
Callback作法
function taskA(callback) {
setTimeout(function () {
console.log('this is task A');
// 控制參數函式的執行時機(印出this is task A後,才執行taskB)
callback(); // 這邊的callback就是taskB
}, 3000);
}
function taskB() {
console.log('this is task B');
}
// taskB作為參數傳入
taskA(taskB);參考資料