Event Loop
提示
這是什麼:因為 JS 一次只能做一件事(單執行緒)
JavaScript 是單執行緒 (同步)
JavaScript 一次只能做一件事情,並且是由上而下順序讀取代碼,例如:阿美中午午休要去買午餐
- 打算先去麵攤買個麵
- 等麵好
- 再去麵包店買個明天的早餐
JS 會很單純的一步一步等每一件事情執行完成才執行下一步
Event Queue 事件佇列
但小春個性比較急,他不喜歡等,所以他打算:
- 先去麵攤叫個麵 (麵好了老闆會先放在 queue 裡)
- 去麵包店買麵包
- 直接去 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 這樣一次做一件事,做完一件再做下一件就是屬於同步,但如果今天瀏覽網站送出一個表單後,整個網站會像當機一樣停住不能做任何事,直到伺服器回應了『表單送出成功』才能再繼續瀏覽網站就很不科學, 所以就出現了非同步的慨念,表單送出後不會整個網站停住可以繼續瀏覽,而是由瀏覽器或其他環境來處理非同步的狀況
備註