最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你了解vue.js的事件循環(huán)機(jī)制

 更新時(shí)間:2022年03月04日 11:33:10   作者:三月的一天  
這篇文章主要為大家詳細(xì)介紹了vue.js事件循環(huán)機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

一、事件循環(huán)機(jī)制介紹       

JS是單線程的語(yǔ)言,瀏覽器和Node.js定義了各自的Event Loop(事件循環(huán)機(jī)制)則是用來(lái)解決異步問題。將程序分為“主線程(執(zhí)行棧)”與“Event Loop線程”,“主線程”自上而下依次執(zhí)行同步任務(wù),“Event Loop線程”將異步任務(wù)推入宏任務(wù)隊(duì)列與微任務(wù)隊(duì)列去執(zhí)行。

事件循環(huán)機(jī)制從整體上告訴了我們 JavaScript 代碼的執(zhí)行順序 Event Loop 即事件循環(huán),是指瀏覽器或Node 的一種解決javaScript 單線程運(yùn)行時(shí)不會(huì)阻塞的一種機(jī)制,也就是我們經(jīng)常使用異步的原理。“Event Loop線程”先執(zhí)行宏任務(wù)隊(duì)列,然后執(zhí)行微任務(wù)隊(duì)列,若微任務(wù)在執(zhí)行過程中產(chǎn)生了新的微任務(wù),則繼續(xù)執(zhí)行微任務(wù),微任務(wù)執(zhí)行完畢后,再回到宏任務(wù)中進(jìn)行下一輪循環(huán)。即繼續(xù)先執(zhí)行宏任務(wù)隊(duì)列,再執(zhí)行 微任務(wù)隊(duì)列。

宏任務(wù):

script(整體代碼)/setTimeout/setInterval/setImmediate/ I/O / UI Rendering

微任務(wù):

process.nextTick()/Promise/Async、Await(實(shí)際就是Promise)/MutationObserver(html5新特性)

setTimeout 和 setInterval 等都是任務(wù)源,真正進(jìn)入任務(wù)隊(duì)列的是他們分發(fā)的任務(wù)。

優(yōu)先級(jí)

setTimeout = setInterval 一個(gè)隊(duì)列setTimeout > setImmediate process.nextTick > Promise

二、經(jīng)典事件循環(huán)面試題

1.在下面這段代碼是面試中關(guān)于這類問題的經(jīng)典考題,其中包含了同步、異步任務(wù),幾個(gè)輸出的先后順序是怎樣的。

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

首先進(jìn)行任務(wù)劃分,同步任務(wù):new Promise()、console.log('4')宏任務(wù)setTimeout();微任務(wù)Promise().then()Event Loop依次將同步任務(wù)推入執(zhí)行棧并執(zhí)行,當(dāng)遇到宏任務(wù)或微任務(wù)時(shí),推到宏任務(wù)或微任務(wù)隊(duì)列中。先執(zhí)行同步任務(wù),同步隊(duì)列執(zhí)行完畢,會(huì)去微隊(duì)列取任務(wù),直到微隊(duì)列清空,再去宏隊(duì)列取任務(wù)執(zhí)行。故此段程序執(zhí)行順序?yàn)椋?/p>

new Promise()、console.log('4')、Promise().then()setTimeout()。

 2.示例2

 答案輸出為:async2 end => Promise => async1 end => promise1 => promise2 => setTimeout

3.示例3

        mounted(){
            this.test();
 
        },
        methods:{
            test(){
                console.log('script start');
 
                this.async1();
 
                setTimeout(function() {
                 console.log('setTimeout')
                }, 0);
 
                new Promise(resolve => {
                    console.log('Promise')
                    resolve()
                })
                .then(function() {
                console.log('promise1')
                })
                .then(function() {
                console.log('promise2')
                })
 
                console.log('script end')
            },
            async async1() {
                await this.async2()
                    console.log('async1 end')
            },
            async async2() {
              console.log('async2 end')
            },
        }

新版的chrome瀏覽器中不是如上打印的,因?yàn)閏hrome優(yōu)化了,await變得更快了,輸出為:

// script start => async2 end => Promise => script end => async1 end => promise1 => promise2

分析這段代碼:

  • 執(zhí)行代碼,輸出script start。
  • 執(zhí)行async1(),會(huì)調(diào)用async2(),然后輸出async2 end,此時(shí)將會(huì)保留async1函數(shù)的上下文,然后跳出async1函數(shù)。
  • 遇到setTimeout,產(chǎn)生一個(gè)宏任務(wù)
  • 執(zhí)行Promise,輸出Promise。遇到then,產(chǎn)生第一個(gè)微任務(wù)
  • 繼續(xù)執(zhí)行代碼,輸出script end
  • 代碼邏輯執(zhí)行完畢(當(dāng)前宏任務(wù)執(zhí)行完畢),開始執(zhí)行當(dāng)前宏任務(wù)產(chǎn)生的微任務(wù)隊(duì)列,輸出promise1,該微任務(wù)遇到then,產(chǎn)生一個(gè)新的微任務(wù) 
  • 執(zhí)行產(chǎn)生的微任務(wù),輸出promise2,當(dāng)前微任務(wù)隊(duì)列執(zhí)行完畢。執(zhí)行權(quán)回到async1 
  • 執(zhí)行await,實(shí)際上會(huì)產(chǎn)生一個(gè)promise返回,即
  • let promise_ = new Promise((resolve,reject){ resolve(undefined)})
  • 執(zhí)行完成,執(zhí)行await后面的語(yǔ)句,輸出async1 end 最后,執(zhí)行下一個(gè)宏任務(wù),即執(zhí)行setTimeout,輸出setTimeout
  • 注意以上分析是舊版瀏覽器await執(zhí)行慢導(dǎo)致async1在微任務(wù)執(zhí)行后執(zhí)行。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 關(guān)于Vue-extend和VueComponent問題小結(jié)

    關(guān)于Vue-extend和VueComponent問題小結(jié)

    這篇文章主要介紹了Vue-extend和VueComponent問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • vue 右鍵菜單插件 簡(jiǎn)單、可擴(kuò)展、樣式自定義的右鍵菜單

    vue 右鍵菜單插件 簡(jiǎn)單、可擴(kuò)展、樣式自定義的右鍵菜單

    這篇文章主要介紹了vue 右鍵菜單插件 簡(jiǎn)單、可擴(kuò)展、樣式自定義的右鍵菜單,本文給大家分享個(gè)例子,給大家及時(shí)的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-11-11
  • vue3?setup中使用響應(yīng)式的方法

    vue3?setup中使用響應(yīng)式的方法

    文章主要介紹了Vue3中的響應(yīng)式數(shù)據(jù)處理機(jī)制,包括ref和reactive函數(shù)的使用,它們的區(qū)別,以及如何使用watch和watchEffect來(lái)監(jiān)聽數(shù)據(jù)變化,文章最后提到了Vue3的生命周期鉤子和自定義hooks的概念,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 使用 Vue 綁定單個(gè)或多個(gè) Class 名的實(shí)例代碼

    使用 Vue 綁定單個(gè)或多個(gè) Class 名的實(shí)例代碼

    這篇文章主要介紹了使用 Vue 綁定單個(gè)或多個(gè) Class 名的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-01-01
  • vue使用代理解決請(qǐng)求跨域問題詳解

    vue使用代理解決請(qǐng)求跨域問題詳解

    這篇文章主要為大家詳細(xì)介紹了vue使用代理解決請(qǐng)求跨域問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • vue3中使用pinia(大菠蘿)狀態(tài)管理倉(cāng)庫(kù)的項(xiàng)目實(shí)踐

    vue3中使用pinia(大菠蘿)狀態(tài)管理倉(cāng)庫(kù)的項(xiàng)目實(shí)踐

    本文主要介紹了vue3中使用pinia(大菠蘿)狀態(tài)管理倉(cāng)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • vue3中proxy的基本用法說明

    vue3中proxy的基本用法說明

    這篇文章主要介紹了vue3中proxy的基本用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue 中 get / delete 傳遞數(shù)組參數(shù)方法

    vue 中 get / delete 傳遞數(shù)組參數(shù)方法

    這篇文章主要介紹了vue 中 get / delete 傳遞數(shù)組參數(shù)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Vue2路由跳轉(zhuǎn)傳參中文問題處理方案

    Vue2路由跳轉(zhuǎn)傳參中文問題處理方案

    在el-table中的記錄列表中放置了一個(gè) 操作按鈕,點(diǎn)這個(gè)按鈕時(shí)可以新增一個(gè)tab頁(yè)簽,并將通過路由傳參方式將一些信息傳遞到新打開的tab頁(yè)簽中,但發(fā)現(xiàn)傳遞中文參數(shù)時(shí)會(huì)出現(xiàn)報(bào)錯(cuò),所以本文給大家介紹了Vue2路由跳轉(zhuǎn)傳參中文問題處理方案,需要的朋友可以參考下
    2024-05-05
  • 解決vue內(nèi)存溢出報(bào)錯(cuò)的問題

    解決vue內(nèi)存溢出報(bào)錯(cuò)的問題

    這篇文章主要介紹了解決vue內(nèi)存溢出報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

天台县| 万宁市| 麻城市| 子洲县| 绩溪县| 安溪县| 黑龙江省| 读书| 大悟县| 丘北县| 潮安县| 碌曲县| 沈阳市| 徐州市| 翼城县| 双城市| 桃园县| 女性| 龙泉市| 禄丰县| 墨脱县| 禄丰县| 桓台县| 深州市| 专栏| 万源市| 兖州市| 读书| 绥阳县| 海门市| 循化| 贺州市| 驻马店市| 沈阳市| 巴彦淖尔市| 星子县| 东城区| 翁牛特旗| 千阳县| 尤溪县| 屏东县|