欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單聊聊JavaScript的事件循環(huán)機制

 更新時間:2022年03月18日 10:01:51   作者:程序猿布歐  
前端開發(fā)的童鞋應該都知道,JavaScript是一門單線程的腳本語言,這就意味著JavaScript 代碼在執(zhí)行的時候,只有一個主線程來執(zhí)行所有的任務,同一個時間只能做同一件事情,這篇文章主要給大家介紹了關于JavaScript事件循環(huán)機制的相關資料,需要的朋友可以參考下

前言

JavaScript是一門單線程的弱類型語言,但是我們在開發(fā)中,經常會遇到一些需要異步或者等待的處理操作。

類似ajax,亦或者ES6中新增的promise操作用于處理一些回調函數(shù)等。

概念

在JavaScript代碼執(zhí)行過程中,可以分為同步隊列和異步隊列。

同步任務類似我們常說的立即執(zhí)行函數(shù),不需要等待可以直接進行,可以直接進入到主線程中去執(zhí)行,類似正常的函數(shù)調用等。

異步隊列則是異步執(zhí)行函數(shù),類似ajax請求,我們在發(fā)起的過程中,會進入到一個異步隊列,加載到任務當中時,需要進行等待,之后才能進行返回值的處理。

舉個栗子

下面一段代碼,我們可以先了解一些一些關于事件循環(huán)機制的一些基本的原理

console.log('1');
setTimeout(function() {
  console.log('4');
}, 0);
Promise.resolve().then(function() {
  console.log('2');
}).then(function() {
  console.log('3');
});
console.log('5');

我們將代碼打印到控制臺當中,輸出結果是:1,5,2,3,4

我們知道,在JavaScript中,類似定時器,以及ES6新增的promise是異步函數(shù),回到我們上面所說的隊列的概念當中,不難得出,1和5為同步執(zhí)行隊列

在執(zhí)行完同步隊列中的代碼之后,再執(zhí)行異步隊列中的代碼。

TIP

在解析異步隊列的promise和定時器中,我們發(fā)現(xiàn),定時器setTimeout是后執(zhí)行于promise,這里我們引入JavaScript規(guī)范中的宏任務(Macro Task)和微任務(Micro Task)的概念

在JavaScript中,宏任務包含了:script( 整體代碼)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 環(huán)境)

微任務:Promise、MutaionObserver、process.nextTick(Node.js 環(huán)境)

再回到上面的定時器和promise的問題,這時候我們知道,JavaScript中,當有異步隊列的時候,優(yōu)先執(zhí)行微任務,再執(zhí)行宏任務

再次舉個栗子

假如在異步隊列當中存在異步隊列時,我們需要怎么處理

console.log(1);
setTimeout(function() {
  console.log(5);
}, 10);
new Promise(resolve => {
    console.log(2);
    resolve();
    setTimeout(() => console.log(3), 10);
}).then(function() {
    console.log(4);
})
console.log(6);

將代碼執(zhí)行到控制臺中,得出的打印順序是:1,2,6,4,5,3

  • 不同于例子1當中的promise,打印2是優(yōu)先于6執(zhí)行的,由此我們可以知道,new Promise在執(zhí)行過程中,在未執(zhí)行resolve或者rejected前,所執(zhí)行的代碼均為同步隊列中的代碼。
  • 再看4,5,3的執(zhí)行順序,在執(zhí)行微任務promise執(zhí)行回調resolve之后,對應的then立即執(zhí)行
  • 在打印結果中,定時器5優(yōu)先執(zhí)行于—->屬于微任務promise中的宏任務定時器3,定時器5這個宏任務是在promise微任務這個隊列之后就加進去,在promise執(zhí)行完成then回調之后,promise中的宏任務才加入到隊列當中,因此在定時器5之后執(zhí)行

總結

在JavaScript中,宏任務包含了:script( 整體代碼)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 環(huán)境)

微任務:Promise、MutaionObserver、process.nextTick(Node.js 環(huán)境);

在執(zhí)行過程中,同步代碼優(yōu)先于其他任務隊列中的代碼,

定時器,promise這類任務,在執(zhí)行過程中,會先加入隊列,

在執(zhí)行完同步代碼之后,再根據宏任務和微任務的分類,先執(zhí)行微任務隊列,再執(zhí)行宏任務隊列。

到此這篇關于JavaScript事件循環(huán)機制的文章就介紹到這了,更多相關JS事件循環(huán)機制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js form表單input框限制20個字符,10個漢字代碼實例

    js form表單input框限制20個字符,10個漢字代碼實例

    這篇文章主要介紹了js form表單input框限制20個字符,10個漢字,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 淺析JavaScript中的常用算法與函數(shù)

    淺析JavaScript中的常用算法與函數(shù)

    這篇文章主要介紹了JavaScript中的常用算法與函數(shù)。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • 微信小程序前端自定義分享的實現(xiàn)方法

    微信小程序前端自定義分享的實現(xiàn)方法

    這篇文章主要給大家介紹了關于微信小程序前端自定義分享的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用微信小程序具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • 一文快速弄懂webpack動態(tài)import原理

    一文快速弄懂webpack動態(tài)import原理

    無論你開發(fā)使用的是CommonJS規(guī)范還是ES6模塊規(guī)范,打包后的文件都統(tǒng)一使用webpack自定義的模塊規(guī)范來管理、加載模塊,下面這篇文章主要給大家介紹了關于webpack動態(tài)import原理的相關資料,需要的朋友可以參考下
    2022-04-04
  • JavaScript中的普通函數(shù)和箭頭函數(shù)的區(qū)別和用法詳解

    JavaScript中的普通函數(shù)和箭頭函數(shù)的區(qū)別和用法詳解

    這篇文章主要介紹了JavaScript中的普通函數(shù)和箭頭函數(shù)的區(qū)別和用法詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • vue2.0實戰(zhàn)之基礎入門(1)

    vue2.0實戰(zhàn)之基礎入門(1)

    這篇文章主要為大家詳細介紹了vue2.0實戰(zhàn)第一篇基礎入門的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • js加載之使用DOM方法動態(tài)加載Javascript文件

    js加載之使用DOM方法動態(tài)加載Javascript文件

    傳統(tǒng)上,加載Javascript文件都是使用script標簽,我們也可以使用DOM方法,動態(tài)加載Javascript文件,具體實現(xiàn)如下,感興趣的朋友可以參考下
    2013-11-11
  • 表格展示利器 Bootstrap Table實例代碼

    表格展示利器 Bootstrap Table實例代碼

    在表格導出數(shù)據中,發(fā)現(xiàn)設置了分頁參數(shù),導出的數(shù)據僅為表格加載的分頁參數(shù)數(shù)據,于是,針對這樣的情況,通過設置分頁參數(shù)的值,使表格可以加載更多的數(shù)據,可達到導出所有數(shù)據的功能需求。下面通過本文給大家分享表格展示利器 Bootstrap Table
    2017-09-09
  • js時鐘翻牌效果實現(xiàn)代碼分享

    js時鐘翻牌效果實現(xiàn)代碼分享

    這篇文章主要介紹了javascript時鐘翻牌效果的實現(xiàn),效果非??犰?,實現(xiàn)步驟也很簡單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • JS如何獲取指定范圍內的隨機數(shù)含小數(shù)

    JS如何獲取指定范圍內的隨機數(shù)含小數(shù)

    這篇文章主要介紹了JS如何獲取指定范圍內的隨機數(shù)含小數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論