同步與非同步
舉例來說,我們執行 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>
監聽事件不會馬上執行,會放到事件佇列之中,與非同步語法差別在於,監聽事件要直到有人觸發事件,才會執行!