跳至主要内容

Event Loop

提示

這是什麼:因為 JS 一次只能做一件事(單執行緒)

JavaScript 是單執行緒 (同步)

JavaScript 一次只能做一件事情,並且是由上而下順序讀取代碼,例如:阿美中午午休要去買午餐

  1. 打算先去麵攤買個麵
  2. 等麵好
  3. 再去麵包店買個明天的早餐

JS 會很單純的一步一步等每一件事情執行完成才執行下一步

Event Queue 事件佇列

但小春個性比較急,他不喜歡等,所以他打算:

  1. 先去麵攤叫個麵 (麵好了老闆會先放在 queue 裡)
  2. 去麵包店買麵包
  3. 直接去 queue 拿麵

Event Loop 事件循環 (非同步)

也說到 JavaScript 一次只能做一件事,所以處理 queue 的會是瀏覽器或是 Node.js 來執行,直到 JavaScript 的佇列執行完後,再把存放在 queue 內的取出來執行,就是 Event Loop 的原理

練習題 (請回答會印出什麼資料)

console.log('1');

setTimeout(function() {
console.log('2');
},0);

console.log('3')

答案

1;
3;
2;

上面寫了『同步』和『非同步』是指什麼?

像 JavaScript 這樣一次做一件事,做完一件再做下一件就是屬於同步,但如果今天瀏覽網站送出一個表單後,整個網站會像當機一樣停住不能做任何事,直到伺服器回應了『表單送出成功』才能再繼續瀏覽網站就很不科學, 所以就出現了非同步的慨念,表單送出後不會整個網站停住可以繼續瀏覽,而是由瀏覽器或其他環境來處理非同步的狀況