JS的特點之一,就是他是單執行緒語言,也就是它一次只做一件事
不像多執行緒的 python
那為什麼它還可以同時處理很多事情(像是點擊、API 請求、setTimeout)?這就要靠非同步機制和事件循環(Event Loop)
舉大家熟知經典的setTimeout
例子:
console.log("A");
setTimeout(() => {
console.log("B");
}, 1000);
console.log("C");
結果會印出
A
C
B
我們先來認識執行時的幾個核心名詞概念:
舉例來說:
function sayHi() {
console.log("Hi");
}
function greet() {
sayHi();
}
greet();
它會像這樣👇
setTimeout
、DOM Event
、fetch
都是由瀏覽器的 Web API 處理,不是 JS 本身的功能像這樣的setTimeout()
,流程就會是:
setTimeout(() => {
console.log("Timeout finished!");
}, 1000);
setTimeout
呼叫時,會交給 Web API 處理計時正個執行流程就會長這樣
https://medium.com/@bun.coding/javascript學習筆記-call-stack-呼叫堆疊-d163c05d1035
https://ithelp.ithome.com.tw/articles/10200054