国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

js執(zhí)行順序

這篇具有很好參考價(jià)值的文章主要介紹了js執(zhí)行順序。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.首先js是單線程的

所有的同步任務(wù)都是按順序依次執(zhí)行的,前面的執(zhí)行完了之后才會(huì)執(zhí)行后面的任務(wù)。遇到計(jì)算量大的代碼就會(huì)阻塞在這里。下面的代碼就是打印輸出10000次,當(dāng)循環(huán)走完了之后 才會(huì)走后面的代碼,輸出的時(shí)間是981ms

js執(zhí)行順序

輸出981ms

js執(zhí)行順序

2.因?yàn)閖s是單線程的,所有的任務(wù)都需要按順序執(zhí)行,那如果我在執(zhí)行過程中開啟了一個(gè)定時(shí)器,定時(shí)器延遲10秒執(zhí)行,后面的代碼是不是要十秒之后才執(zhí)行呢?

測(cè)試一下

js執(zhí)行順序

輸出的結(jié)果表示:定時(shí)器后面的代碼先執(zhí)行了,而定時(shí)器里面的代碼再10秒后執(zhí)行了

js執(zhí)行順序

?這是為什么呢?

因?yàn)閖s雖然是單線程,但是我們并不需要所有的代碼都要依次執(zhí)行,避免一些不必要的阻塞。所以就引入了事件循環(huán)隊(duì)列。引入了事件循環(huán)隊(duì)列之后,就將js中所有的代碼分成了兩大類 ,一類是同步代碼,另一類是異步代碼。同步代碼的執(zhí)行順序總是早于異步代碼。 可以理解成,js從上到下依次執(zhí)行,遇到同步的就直接執(zhí)行,遇到異步的,就將異步的代碼放到最后再執(zhí)行。

下面代碼的執(zhí)行順序是可以這樣理解,?從上到下依次執(zhí)行。先執(zhí)行一號(hào)代碼,是同步的,就直接輸出。然后執(zhí)行到二號(hào)代碼,是個(gè)定時(shí)器,定時(shí)器是異步的,所以放到最后面再執(zhí)行。然后執(zhí)行三號(hào)代碼,三號(hào)是同步的,直接輸出。然后執(zhí)行到四號(hào)代碼,四號(hào)代碼也是定時(shí)器,是異步的,所以放到最后(這個(gè)時(shí)候四號(hào)的異步代碼是在二號(hào)的異步代碼后面的)。然后執(zhí)行到五號(hào)代碼,直接輸出。這個(gè)時(shí)候同步的代碼已經(jīng)全部執(zhí)行完了,就開始執(zhí)行剛剛放到最后面的二號(hào)代碼和四號(hào)代碼。

所以輸出順序是 同步1,同步2,同步3,異步1,異步2

js執(zhí)行順序

輸出結(jié)果

?js執(zhí)行順序

?而實(shí)際上,就是將異步的代碼放入任務(wù)隊(duì)列中去,等同步的代碼執(zhí)行完了之后,然后再去執(zhí)行任務(wù)隊(duì)列里的任務(wù)。js執(zhí)行順序

?文章來源地址http://www.zghlxwxcb.cn/news/detail-402229.html

?哪些任務(wù)會(huì)進(jìn)入任務(wù)隊(duì)列呢(異步任務(wù)有哪些)?

定時(shí)器,ajax異步請(qǐng)求,promise.then里的東西 等等

任務(wù)隊(duì)列又分成兩個(gè),一個(gè)是宏任務(wù)隊(duì)列,一個(gè)是微任務(wù)隊(duì)列。微任務(wù)隊(duì)列里的任務(wù)要優(yōu)先于宏任務(wù)隊(duì)列里的任務(wù)

宏任務(wù):定時(shí)器等

微任務(wù):promise.then()里的代碼,promise是同步的,ajax異步請(qǐng)求等

js執(zhí)行順序

上面代碼的執(zhí)行順序是(結(jié)合圖一起看):

1.遇到了1號(hào)代碼,是同步的,直接執(zhí)行 輸出1號(hào),同步1。

2.遇到了二號(hào)代碼,是個(gè)定時(shí)器,是宏任務(wù),異步的。所以先不執(zhí)行,放入宏任務(wù)隊(duì)列

3.遇到三號(hào)代碼的promise,是個(gè)微任務(wù),先不執(zhí)行,放入微任務(wù)隊(duì)列

4.遇到5號(hào)代碼,是同步的,直接執(zhí)行 輸出5號(hào),同步2

js執(zhí)行順序

?

5.這個(gè)時(shí)候同步代碼執(zhí)行完了,然后去任務(wù)隊(duì)列里找任務(wù)執(zhí)行。任務(wù)隊(duì)列里有兩個(gè)隊(duì)列,一個(gè)是宏任務(wù)隊(duì)列,里面有個(gè)定時(shí)器。還有一個(gè)微任務(wù)隊(duì)列,里面有個(gè)promse成功的回調(diào)。因?yàn)槲⑷蝿?wù)執(zhí)行順序是先于宏任務(wù)的,所以會(huì)先執(zhí)行promise里面的代碼

6.執(zhí)行promise里的代碼,遇到三號(hào)代碼了,是同步的 直接執(zhí)行 輸出3號(hào),微任務(wù)1

7.繼續(xù)向下執(zhí)行 遇到4號(hào)的定時(shí)器了,4號(hào)定時(shí)器是異步的,并且是宏任務(wù),所以先不執(zhí)行,放入宏任務(wù)隊(duì)列

js執(zhí)行順序

?

8.這個(gè)時(shí)候微任務(wù)隊(duì)列里已經(jīng)沒有任務(wù)了,所以去執(zhí)行宏任務(wù)隊(duì)列里的任務(wù)。宏任務(wù)隊(duì)列里先在有兩個(gè)任務(wù),一個(gè)是2號(hào)的定時(shí)器,一個(gè)是4號(hào)的定時(shí)器。

9.按順序,先執(zhí)行2號(hào)定時(shí)器里面的代碼,里面的代碼是同步的,直接執(zhí)行 輸出2號(hào),宏任務(wù)1

js執(zhí)行順序

?

10.執(zhí)行完宏任務(wù)里的第一個(gè)任務(wù)之后(2號(hào)定時(shí)器),看一下微任務(wù)隊(duì)列里還有沒有任務(wù),? ?有的話就繼續(xù)執(zhí)行微任務(wù)隊(duì)列里的任務(wù),沒有的話就繼續(xù)執(zhí)行下一個(gè)宏任務(wù)隊(duì)列里的任務(wù)。

11.我們這里微任務(wù)隊(duì)列已經(jīng)沒有其他任務(wù)了,所以繼續(xù)執(zhí)行宏任務(wù)隊(duì)列里的任務(wù)。執(zhí)行4號(hào)定時(shí)器,里面的代碼是同步的,所以直接執(zhí)行,輸出 4號(hào),promise里的定時(shí)器

js執(zhí)行順序

輸出結(jié)果?

js執(zhí)行順序

?

?

?

到了這里,關(guān)于js執(zhí)行順序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入理解高并發(fā)編程 - 線程的執(zhí)行順序

    在Java中,線程的執(zhí)行順序是由操作系統(tǒng)的調(diào)度機(jī)制決定的,具體順序是不確定的,取決于多個(gè)因素,如操作系統(tǒng)的調(diào)度策略、線程的優(yōu)先級(jí)、線程的狀態(tài)轉(zhuǎn)換等。因此,不能對(duì)線程的執(zhí)行順序做出可靠的假設(shè)。 以下是一個(gè)簡(jiǎn)單的Java代碼示例,演示了多個(gè)線程的執(zhí)行順序是不

    2024年02月14日
    瀏覽(24)
  • 【業(yè)務(wù)功能篇91】微服務(wù)-springcloud-多線程-線程池執(zhí)行順序

    【業(yè)務(wù)功能篇91】微服務(wù)-springcloud-多線程-線程池執(zhí)行順序

    1.1 繼承Thread 1.2 實(shí)現(xiàn)Runnable接口 1.3 Callable接口 ??上面的三種獲取線程的方法是直接獲取,沒有對(duì)線程做相關(guān)的管理,這時(shí)可以通過線程池來更加高效的管理線程對(duì)象。 然后我們就可以通過這個(gè)線程池對(duì)象來獲取對(duì)應(yīng)的線程 ??通過上面的介紹我們發(fā)現(xiàn)獲取線程的方式 繼承

    2024年02月10日
    瀏覽(61)
  • 如何保證三個(gè)線程按順序執(zhí)行?不會(huì)我教你

    ?????作者:bug菌 ??博客:CSDN、掘金、infoQ、51CTO等 ??簡(jiǎn)介:CSDN|阿里云|華為云|51CTO等社區(qū)博客專家,歷屆博客之星Top30,掘金年度人氣作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社區(qū)優(yōu)質(zhì)創(chuàng)作者,全網(wǎng)粉絲合計(jì) 15w+ ??;硬核微信公眾號(hào)「猿圈奇妙屋」,歡迎你的

    2024年02月07日
    瀏覽(17)
  • js執(zhí)行順序

    js執(zhí)行順序

    1.首先js是單線程的 所有的同步任務(wù)都是按順序依次執(zhí)行的,前面的執(zhí)行完了之后才會(huì)執(zhí)行后面的任務(wù)。遇到計(jì)算量大的代碼就會(huì)阻塞在這里。下面的代碼就是打印輸出10000次,當(dāng)循環(huán)走完了之后 才會(huì)走后面的代碼,輸出的時(shí)間是981ms 輸出981ms 2.因?yàn)閖s是單線程的,所有的任務(wù)

    2023年04月08日
    瀏覽(17)
  • js中如何順序執(zhí)行異步任務(wù)

    在js中,任務(wù)可分為兩種,同步任務(wù)和異步任務(wù)。 (1) 同步任務(wù) 又叫 非耗時(shí)任務(wù) ,指的是在主線程排隊(duì)執(zhí)行的那些任務(wù) 只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù) (2) 異步任務(wù) 又叫 耗時(shí)任務(wù) ,異步任務(wù)由JavaScript委托給宿主環(huán)境進(jìn)行執(zhí)行 當(dāng)異步任務(wù)執(zhí)行完成后,會(huì)通知

    2024年02月09日
    瀏覽(24)
  • 【昕寶爸爸小模塊】如何讓Java的線程池順序執(zhí)行任務(wù)

    【昕寶爸爸小模塊】如何讓Java的線程池順序執(zhí)行任務(wù)

    ??博客首頁???????https://blog.csdn.net/Java_Yangxiaoyuan ???????歡迎優(yōu)秀的你??點(diǎn)贊、???收藏、加??關(guān)注哦。 ???????本文章CSDN首發(fā),歡迎轉(zhuǎn)載,要注明出處哦! ???????先感謝優(yōu)秀的你能認(rèn)真的看完本文,有問題歡迎評(píng)論區(qū)交流,都會(huì)認(rèn)真回復(fù)! Java中的線程池

    2024年01月16日
    瀏覽(20)
  • JS執(zhí)行機(jī)制--同步與異步

    JS執(zhí)行機(jī)制--同步與異步

    單線程 JavaScript語言具有單線程的特點(diǎn),同一個(gè)時(shí)間只能做一件事情。這是因?yàn)镴avaScript腳本語言是為了處理頁面中用戶的交互,以及操作DOM而誕生的。如果對(duì)某個(gè)DOM元素進(jìn)行添加和刪除,不同同時(shí)進(jìn)行。應(yīng)該是先添加,再刪除,事件有序。 單線程的特點(diǎn)是所有任務(wù)都需要排隊(duì)

    2023年04月20日
    瀏覽(19)
  • 一文讀懂異步和同步——async/await在運(yùn)行時(shí)和普通代碼的執(zhí)行順序的問題

    一文讀懂異步和同步——async/await在運(yùn)行時(shí)和普通代碼的執(zhí)行順序的問題

    一、執(zhí)行順序問題 JavaScript中的await語句是異步編程中用于等待Promise對(duì)象執(zhí)行結(jié)果的,它通常與async函數(shù)一起使用。在使用await時(shí),程序的執(zhí)行將暫停,直到該后面的Promise對(duì)象完成執(zhí)行并返回結(jié)果。 函數(shù)代碼執(zhí)行順序通常情況下按照代碼所在文件從上至下

    2024年02月03日
    瀏覽(20)
  • kafka Consumer 消費(fèi)者使用多線程并發(fā)執(zhí)行,并保證順序消費(fèi), 第一種使用純線程方式、第二種使用Executors線程池

    kafka Consumer 消費(fèi)者使用多線程并發(fā)執(zhí)行,并保證順序消費(fèi), 第一種使用純線程方式、第二種使用Executors線程池

    網(wǎng)上搜索kafka消費(fèi)者通過多線程進(jìn)行順序消費(fèi)的內(nèi)容都不太理想,或者太過復(fù)雜,所以自己寫了幾個(gè)demo,供大家參考指正。 ????????單個(gè)消費(fèi)者,每秒需要處理1000條數(shù)據(jù),每條數(shù)據(jù)的處理時(shí)間為500ms,相同accNum(客戶賬號(hào))的數(shù)據(jù)需要保證消費(fèi)的順序。 1、如果1秒鐘生產(chǎn)

    2024年02月15日
    瀏覽(22)
  • 解決:js 根據(jù)圖片鏈接(image url)下載,有的打開預(yù)覽,有的下載

    1、問題描述 https://*****/drugTestReport/20230515/202305151106111386737.png https://*****/drugTestReport/20230605/202306051540314553141.jpg 同樣結(jié)構(gòu)的兩個(gè)圖片鏈接,使用window.open(url),一個(gè)是打開預(yù)覽,另一個(gè)是下載 ? 2、解決方法,通過fetch請(qǐng)求url,獲取blob類型,區(qū)分情況,統(tǒng)一成下載。 ?

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包