前端筆記-JavaScript-單執行緒與同步非同步

JavaScript 是一種單執行緒 (Single Thread) 程式語言

Gene
Jun 30, 2021

執行緒式作業系統的運行概念,分為『單執行緒』與『多執行緒』,簡單來說就是程式一次只能執行一個任務的話,就是『單執行緒』,而 JavaScript 就是一種『單執行緒』的語言。

而既然是單執行緒的話,你會問說,欸 JavaScript 不是可以非同步嗎?是的沒錯,讓我們看下去。

同步與非同步

資料來源-六角學院

舉例來說,我們執行 doWork()的時候,它依然是以同步的概念依序執行函式,一直執行到 callSomeone 裡的非同步語法 setTimeout 時,它不會立即執行,而是將這段程式碼放到『事件佇列』中,直到所有程式碼都執行完畢後,再回頭去執行事件佇列裡的程式碼。

因此執行結果會是這樣。

事件佇列(Event queue)

資料來源-六角學院

用執行堆疊的角度來看,事件佇列會等到所有執行堆疊都執行完畢之後,才會執行,即使我們把 setTimeout 秒數改為 0,依然不會改變。

監聽事件也會移到事件佇列

<body>  
<p>點擊此段文字</p>
<script>
function clickThis() {
console.log('click');
}
var dom = document.querySelector('p');
dom.addEventListener('click', clickThis, false);
</script>
</body>

監聽事件不會馬上執行,會放到事件佇列之中,與非同步語法差別在於,監聽事件要直到有人觸發事件,才會執行!

--

--

Gene
Gene

Written by Gene

— Do or Do Not. There is no Try!

No responses yet