成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js執(zhí)行機(jī)制

joyvw / 2641人閱讀

摘要:在上面代碼中,進(jìn)入宏任務(wù),并將注冊(cè)為宏任務(wù)放入隊(duì)列,接著執(zhí)行哈哈哈,遇到直接執(zhí)行,回調(diào)函數(shù)放置微任務(wù)隊(duì)列,接著執(zhí)行嘻嘻嘻,第二個(gè)如上。

在實(shí)際開發(fā)中,總是遇到請(qǐng)求結(jié)束后,想要把請(qǐng)求得到數(shù)據(jù)賦值給某一個(gè)對(duì)象或者變量,如果沒有在請(qǐng)求的回調(diào)函數(shù)中賦值,而是在請(qǐng)求語句下面賦值,我們會(huì)發(fā)現(xiàn)請(qǐng)求得到數(shù)據(jù)正常,但是賦值后的變量是undefined。這是為什么呢?
首先,我們要了解一個(gè)概念,就是同步與異步。眾所周知,js是單線程語言,也就是說,js一次只能執(zhí)行一個(gè)任務(wù),如果有多個(gè)任務(wù)的話呢,那就按照任務(wù)的順序依次執(zhí)行。但是如果其中某一個(gè)任務(wù)耗費(fèi)大量時(shí)間,比如陷入死循環(huán),那么其他任務(wù)都不能執(zhí)行,會(huì)造成瀏覽器無響應(yīng)。那么js是如何解決的呢?那就是將任務(wù)分為同步和異步模式進(jìn)行執(zhí)行。同步如上,異步呢是指,擁有大于一個(gè)的回調(diào)函數(shù),任務(wù)在執(zhí)行結(jié)束時(shí)不是執(zhí)行下一個(gè)任務(wù)而是執(zhí)行回調(diào)函數(shù),那么有人可能會(huì)有疑問,這樣做與同步有什么區(qū)別呢?區(qū)別在于,后一個(gè)任務(wù)不用等前一個(gè)任務(wù)完全執(zhí)行后再去執(zhí)行。因此我們得到的程序執(zhí)行順序不是任務(wù)的排列順序。

setTimeout(function(){
    console.log("第一個(gè)延時(shí)調(diào)用");
});
console.log("哈哈哈");
new Promise(function(resolve){
    console.log("promise任務(wù)嗎");
    resolve();
}).then(function(){
    console.log("回調(diào)函數(shù)???")
});
console.log("嘻嘻嘻");
setTimeout(function(){
    console.log("第二個(gè)延時(shí)調(diào)用");
});

執(zhí)行結(jié)果是什么呢?
哈哈哈
promise任務(wù)嗎
嘻嘻嘻
回調(diào)函數(shù)???

第一個(gè)延時(shí)調(diào)用
第二個(gè)延時(shí)調(diào)用
為什么是這樣呢?為什么setTimeout會(huì)在最后才執(zhí)行,明明是0ms啊。
是因?yàn)槌送疆惒侥J酵?,我們?duì)任務(wù)還有進(jìn)一步的劃分,宏任務(wù)微任務(wù)。
宏任務(wù):包括整體代碼script,setTimeout,setInterval
微任務(wù):Promise,process.nextTick
在執(zhí)行時(shí),進(jìn)入宏任務(wù)后,開始第一次循環(huán),接著執(zhí)行所有微任務(wù),然后在進(jìn)行宏任務(wù)的下次循環(huán)。
在上面代碼中,進(jìn)入宏任務(wù),并將setTimeout注冊(cè)為宏任務(wù)放入隊(duì)列,接著執(zhí)行哈哈哈,遇到new Promise 直接執(zhí)行,回調(diào)函數(shù)放置微任務(wù)隊(duì)列,接著執(zhí)行嘻嘻嘻,第二個(gè)setTimeout如上。接著執(zhí)行微任務(wù),這里僅有嘻嘻嘻。最后進(jìn)入下次宏任務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96842.html

相關(guān)文章

  • 10分鐘理解JS引擎的執(zhí)行機(jī)制

    摘要:深入理解引擎的執(zhí)行機(jī)制靈魂三問為什么是單線程的為什么需要異步單線程又是如何實(shí)現(xiàn)異步的呢中的中的說說首先請(qǐng)牢記點(diǎn)是單線程語言的是的執(zhí)行機(jī)制。 深入理解JS引擎的執(zhí)行機(jī)制 1.靈魂三問 : JS為什么是單線程的? 為什么需要異步? 單線程又是如何實(shí)現(xiàn)異步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4.說說setTimeout 首先,請(qǐng)牢記2...

    zzbo 評(píng)論0 收藏0
  • 深入理解js引擎的執(zhí)行機(jī)制

    摘要:深入理解引擎的執(zhí)行機(jī)制最近在反省,很多知識(shí)都是只會(huì)用,不理解底層的知識(shí)。在閱讀之前,請(qǐng)先記住兩點(diǎn)是單線程語言的是的執(zhí)行機(jī)制。所以,是存在異步執(zhí)行的,比如單線程是怎么實(shí)現(xiàn)異步的場(chǎng)景描述通過事件循環(huán),所以說,理解了機(jī)制,也就理解了的執(zhí)行機(jī)制啦。 深入理解js引擎的執(zhí)行機(jī)制 最近在反省,很多知識(shí)都是只會(huì)用,不理解底層的知識(shí)。所以在開發(fā)過程中遇到一些奇怪的比較難解決的bug,在思考的時(shí)候就會(huì)收...

    feng409 評(píng)論0 收藏0
  • 前端進(jìn)階系列(八):JS執(zhí)行機(jī)制

    摘要:一直以來,對(duì)的執(zhí)行機(jī)制都是模棱兩可,知道今天看了文章這一次,徹底弄懂執(zhí)行機(jī)制和的規(guī)范和實(shí)現(xiàn),才對(duì)的執(zhí)行機(jī)制有了深入的理解,下面是我的學(xué)習(xí)總結(jié)。個(gè)要點(diǎn)是單線程語言是的執(zhí)行機(jī)制,為了實(shí)現(xiàn)主線程的不阻塞,就這么誕生了。 一直以來,對(duì)JS的執(zhí)行機(jī)制都是模棱兩可,知道今天看了文章—《這一次,徹底弄懂JavaScript執(zhí)行機(jī)制》和《Event Loop的規(guī)范和實(shí)現(xiàn)》,才對(duì)JS的執(zhí)行機(jī)制有了深入的...

    JackJiang 評(píng)論0 收藏0
  • Event Loop - JS執(zhí)行機(jī)制

    摘要:心塞塞根據(jù)規(guī)范,事件循環(huán)是通過任務(wù)隊(duì)列的機(jī)制來進(jìn)行協(xié)調(diào)的。等便是任務(wù)源,而進(jìn)入任務(wù)隊(duì)列的是他們指定的具體執(zhí)行任務(wù)回調(diào)函數(shù)。然后當(dāng)前本輪的結(jié)束,主線程可以繼續(xù)取下一個(gè)執(zhí)行。 依然是:經(jīng)濟(jì)基礎(chǔ)決定上層建筑。 說明 首先,旨在搞清常用的同步異步執(zhí)行機(jī)制 其次,暫時(shí)不討論node.js的Event Loop執(zhí)行機(jī)制,以下關(guān)于瀏覽器的Event Loop執(zhí)行機(jī)制 最后,借鑒了很多前輩的研究文...

    muddyway 評(píng)論0 收藏0
  • JS執(zhí)行機(jī)制

    摘要:事件表每次調(diào)用函數(shù)或執(zhí)行異步操作時(shí),都會(huì)將其添加到事件表中,事件表負(fù)責(zé)記錄每個(gè)事件完成后執(zhí)行的回調(diào)函數(shù),并監(jiān)聽事件,事件完成后會(huì)把事件的回調(diào)函數(shù)發(fā)送到事件隊(duì)列。事件隊(duì)列事件隊(duì)列接收來自事件表的回調(diào)函數(shù),并根據(jù)順序執(zhí)行。 前言 先上一段代碼,可以根據(jù)自己之前對(duì)JS執(zhí)行機(jī)制的理解,進(jìn)行分析 console.log(script start); setTimeout(function() ...

    wow_worktile 評(píng)論0 收藏0
  • Javascript系列之javascript機(jī)制

    摘要:異步任務(wù)必須指定回調(diào)函數(shù),當(dāng)異步任務(wù)從任務(wù)隊(duì)列回到執(zhí)行棧,回調(diào)函數(shù)就會(huì)執(zhí)行。事件循環(huán)主線程從任務(wù)隊(duì)列中讀取事件,這個(gè)過程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為。事件循環(huán)事件循環(huán)是指主線程重復(fù)從消息隊(duì)列中取消息執(zhí)行的過程。 參考鏈接:這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制https://zhuanlan.zhihu.com/p/...從瀏覽器多進(jìn)程到JS單線程,JS運(yùn)行機(jī)制...

    13651657101 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<