呼叫堆疊
JavaScript 是一門單執行緒的語言,這意味著它只有一個呼叫堆疊,因此,它同一時間只能做一件事,如果我們運行到一個函式,它就會將其放置到堆疊頂,當從這個函式回傳的時候,就會將這個函式從堆疊頂彈出,這就是呼叫堆疊做的事情,
1 function multiply(x, y) { 2 return x * y; 3 } 4 function printSquare(x) { 5 var s = multiply(x, x); 6 console.log(s); 7 } 8 printSquare(5);
背景關系

事件回圈
引入鏈接 :
https://juejin.cn/post/6844903512845860872
- macro-task(宏任務):包括整體代碼script,setTimeout,setInterval
- micro-task(微任務):Promise,process.nextTick
進入整體代碼(宏任務)后,開始第一次回圈,接著執行所有的微任務,然后再次從宏任務開始,找到其中一個任務佇列執行完畢,再執行所有的微任務,
1 setTimeout(function() { 2 console.log('setTimeout'); 3 }) 4 5 new Promise(function(resolve) { 6 console.log('promise'); 7 }).then(function() { 8 console.log('then'); 9 }) 10 11 console.log('console');
- 首先進入整體代碼(宏任務)
- 遇到SetTimout,將其回呼函式console.log 加入宏任務的Event Queue
- 遇到 new Promise 執行 ,將.then加入到微任務
- 遇到 console.log 執行
- 整個script代碼(宏任務)這個時候已經執行,然后檢查微任務發現有 一個.then的微任務,執行他
- 第一輪宏代碼已經執行完成,開始了第二輪,檢查宏任務的Event Queue,發現了setTimeout,執行他,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353193.html
標籤:JavaScript
上一篇:一文搞懂js中的typeof用法
