亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

JS中定時(shí)器線(xiàn)程理解

tuniutech / 2069人閱讀

摘要:兩次結(jié)果不一致,是因?yàn)榇a執(zhí)行到定時(shí)器時(shí),此時(shí)定時(shí)器線(xiàn)程開(kāi)始定時(shí),定時(shí)時(shí)間到之后,將定時(shí)回調(diào)事件推入事件隊(duì)列而最后,線(xiàn)程依據(jù)事件隊(duì)列中順序執(zhí)行。

最近在準(zhǔn)備面試,對(duì)于JS原理性的文章,感覺(jué)很有必要系統(tǒng)整理下,不必每一次都要查詢(xún)資料,節(jié)約時(shí)間。

問(wèn)題

setTimeout(function(){
    console.log("開(kāi)始執(zhí)行定時(shí)器回調(diào): "+ new Date())
    console.log("我是定時(shí)器")
},0)

大家覺(jué)得這個(gè)定時(shí)器定時(shí)時(shí)間設(shè)為0,有意義嗎?是否覺(jué)得上述代碼效果等同于

console.log("開(kāi)始執(zhí)行定時(shí)器回調(diào): "+ new Date())
console.log("我是定時(shí)器")

實(shí)踐是檢驗(yàn)真理的最好途徑。我們不排斥拿來(lái)主義,但是如果能自己實(shí)踐驗(yàn)證,對(duì)于提升自身格物致知的精神很有裨益。針對(duì)上述問(wèn)題,我們用兩個(gè)實(shí)驗(yàn)來(lái)解開(kāi)答案:
實(shí)驗(yàn)一:

console.log("1")
console.log("我是定時(shí)器")
console.log("2")

打印結(jié)果

實(shí)驗(yàn)二:

console.log("1")
setTimeout(function(){
    console.log("我是定時(shí)器")
},0)
console.log("2")

打印結(jié)果

通過(guò)上述兩個(gè)實(shí)驗(yàn)結(jié)果,我們可以得知 定時(shí)器定時(shí)為0時(shí),JS執(zhí)行到定時(shí)器這一步,并不是直接開(kāi)始執(zhí)行定時(shí)回調(diào),而是執(zhí)行了后續(xù)代碼之后,才執(zhí)行。

那為什么會(huì)這樣呢?
我們?nèi)匀荒脙蓚€(gè)例子來(lái)說(shuō)明:
實(shí)驗(yàn)三:

    console.log("1")
    console.log("定時(shí)器線(xiàn)程開(kāi)始計(jì)時(shí): "+ new Date())
    setTimeout(function(){
        console.log("開(kāi)始執(zhí)行定時(shí)器回調(diào): "+ new Date())
    },5000)
    for(var i=0;i<500;i++){
        console.log("我是循環(huán)")
    }
    console.log("事件隊(duì)列最后一位: "+ new Date())

打印結(jié)果:

從結(jié)果中可以看出,從定時(shí)器線(xiàn)程開(kāi)始定時(shí),到定時(shí)5秒結(jié)束后,將定時(shí)回調(diào)事件放入事件隊(duì)列中執(zhí)行,用了5秒。

實(shí)驗(yàn)四:

    console.log("1")
    console.log("定時(shí)器線(xiàn)程開(kāi)始計(jì)時(shí): "+ new Date())
    setTimeout(function(){
        console.log("開(kāi)始執(zhí)行定時(shí)器回調(diào): "+ new Date())
    },5000)
    for(var i=0;i<50000;i++){
        console.log("我是循環(huán)")
    }
    console.log("事件隊(duì)列最后一位: "+ new Date())

打印結(jié)果:

從結(jié)果中可以看出,從定時(shí)器線(xiàn)程開(kāi)始定時(shí),到定時(shí)5秒結(jié)束后,將定時(shí)回調(diào)事件放入事件隊(duì)列中執(zhí)行,用了9秒。

兩次結(jié)果不一致,是因?yàn)镴S代碼執(zhí)行到定時(shí)器時(shí),此時(shí)定時(shí)器線(xiàn)程開(kāi)始定時(shí),定時(shí)時(shí)間到之后,將定時(shí)回調(diào)事件推入事件隊(duì)列最后,JS線(xiàn)程依據(jù)事件隊(duì)列中順序執(zhí)行。而之所以有的延時(shí)5秒,有的延時(shí)9秒,是因?yàn)槿绻〞r(shí)器開(kāi)始計(jì)時(shí)時(shí),JS事件隊(duì)列中執(zhí)行剩余的事件小于5秒,則定時(shí)結(jié)束后,將定時(shí)回調(diào)事件推入隊(duì)列中,JS能夠立即執(zhí)行定時(shí)回調(diào)事件,所以是5秒;而如果JS事件隊(duì)列中執(zhí)行剩余的事件大于5秒,那么在定時(shí)結(jié)束后,將定時(shí)回調(diào)事件推入隊(duì)列后,還需一些時(shí)間來(lái)執(zhí)行定時(shí)回調(diào)事件之前的事件,所以為9秒。

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

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

相關(guān)文章

  • javascript引擎執(zhí)行的過(guò)程的理解--執(zhí)行階段

    摘要:如果對(duì)語(yǔ)法分析和預(yù)編譯,還有疑問(wèn)引擎執(zhí)行的過(guò)程的理解語(yǔ)法分析和預(yù)編譯階段。參與執(zhí)行過(guò)程的線(xiàn)程分別是引擎線(xiàn)程也稱(chēng)為內(nèi)核,負(fù)責(zé)解析執(zhí)行腳本程序的主線(xiàn)程例如引擎。以上便是引擎執(zhí)行宏任務(wù)的整個(gè)過(guò)程。 一、概述 js引擎執(zhí)行過(guò)程主要分為三個(gè)階段,分別是語(yǔ)法分析,預(yù)編譯和執(zhí)行階段,上篇文章我們介紹了語(yǔ)法分析和預(yù)編譯階段,那么我們先做個(gè)簡(jiǎn)單概括,如下: 1、語(yǔ)法分析: 分別對(duì)加載完成的代碼塊進(jìn)行語(yǔ)法...

    SnaiLiu 評(píng)論0 收藏0
  • javascript引擎執(zhí)行的過(guò)程的理解--執(zhí)行階段

    摘要:如果對(duì)語(yǔ)法分析和預(yù)編譯,還有疑問(wèn)引擎執(zhí)行的過(guò)程的理解語(yǔ)法分析和預(yù)編譯階段。參與執(zhí)行過(guò)程的線(xiàn)程分別是引擎線(xiàn)程也稱(chēng)為內(nèi)核,負(fù)責(zé)解析執(zhí)行腳本程序的主線(xiàn)程例如引擎。以上便是引擎執(zhí)行宏任務(wù)的整個(gè)過(guò)程。一、概述 js引擎執(zhí)行過(guò)程主要分為三個(gè)階段,分別是語(yǔ)法分析,預(yù)編譯和執(zhí)行階段,上篇文章我們介紹了語(yǔ)法分析和預(yù)編譯階段,那么我們先做個(gè)簡(jiǎn)單概括,如下: 1、語(yǔ)法分析: 分別對(duì)加載完成的代碼塊進(jìn)行語(yǔ)法檢驗(yàn),語(yǔ)...

    Achilles 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(四) - js運(yùn)行原理與機(jī)制

    摘要:定時(shí)器線(xiàn)程由于是單線(xiàn)程運(yùn)行,所以不能抽出時(shí)間來(lái)計(jì)時(shí),只能另開(kāi)辟一個(gè)線(xiàn)程來(lái)處理定時(shí)器任務(wù),等計(jì)時(shí)完成,把定時(shí)器要執(zhí)行的操作添加到事件任務(wù)隊(duì)列尾,等待引擎線(xiàn)程來(lái)處理。已經(jīng)知道了是單線(xiàn)程運(yùn)行的,也知道中有同步操作和異步操作。 js運(yùn)行機(jī)制 本章了解一下js的運(yùn)行原理,了解了js的運(yùn)行原理才能寫(xiě)出更優(yōu)美的代碼,提高運(yùn)行效率,還能解決開(kāi)發(fā)中遇到的不理解的問(wèn)題。 進(jìn)程與線(xiàn)程 進(jìn)程是cpu資源分配的...

    LMou 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(四) - js運(yùn)行原理與機(jī)制

    摘要:定時(shí)器線(xiàn)程由于是單線(xiàn)程運(yùn)行,所以不能抽出時(shí)間來(lái)計(jì)時(shí),只能另開(kāi)辟一個(gè)線(xiàn)程來(lái)處理定時(shí)器任務(wù),等計(jì)時(shí)完成,把定時(shí)器要執(zhí)行的操作添加到事件任務(wù)隊(duì)列尾,等待引擎線(xiàn)程來(lái)處理。已經(jīng)知道了是單線(xiàn)程運(yùn)行的,也知道中有同步操作和異步操作。 js運(yùn)行機(jī)制 本章了解一下js的運(yùn)行原理,了解了js的運(yùn)行原理才能寫(xiě)出更優(yōu)美的代碼,提高運(yùn)行效率,還能解決開(kāi)發(fā)中遇到的不理解的問(wèn)題。 進(jìn)程與線(xiàn)程 進(jìn)程是cpu資源分配的...

    leap_frog 評(píng)論0 收藏0
  • Js基礎(chǔ)知識(shí)(四) - js運(yùn)行原理與機(jī)制

    摘要:定時(shí)器線(xiàn)程由于是單線(xiàn)程運(yùn)行,所以不能抽出時(shí)間來(lái)計(jì)時(shí),只能另開(kāi)辟一個(gè)線(xiàn)程來(lái)處理定時(shí)器任務(wù),等計(jì)時(shí)完成,把定時(shí)器要執(zhí)行的操作添加到事件任務(wù)隊(duì)列尾,等待引擎線(xiàn)程來(lái)處理。已經(jīng)知道了是單線(xiàn)程運(yùn)行的,也知道中有同步操作和異步操作。 js運(yùn)行機(jī)制 本章了解一下js的運(yùn)行原理,了解了js的運(yùn)行原理才能寫(xiě)出更優(yōu)美的代碼,提高運(yùn)行效率,還能解決開(kāi)發(fā)中遇到的不理解的問(wèn)題。 進(jìn)程與線(xiàn)程 進(jìn)程是cpu資源分配的...

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

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

0條評(píng)論

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