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

資訊專欄INFORMATION COLUMN

【知識(shí)梳理】4.2JS運(yùn)行機(jī)制

cgh1999520 / 3410人閱讀

摘要:任務(wù)隊(duì)列分同步任務(wù)異步任務(wù),異步任務(wù)要掛起,同步任務(wù)全部執(zhí)行完再執(zhí)行異步任務(wù)。執(zhí)行棧執(zhí)行的是同步任務(wù)。什么時(shí)候開(kāi)啟異步任務(wù)和事件的,先注冊(cè)函數(shù)體,觸發(fā)時(shí)放入異步任務(wù)隊(duì)列,再執(zhí)行點(diǎn)擊某一按鈕瀏覽器卡死中的。

1.對(duì)比同步和異步

使用異步的場(chǎng)景:

定時(shí)任務(wù):setTimeout、setInterval

網(wǎng)絡(luò)請(qǐng)求:ajax請(qǐng)求、動(dòng)態(tài)加載

事件綁定

//同步
  console.log(100);
  alert(200);//同步會(huì)造成阻塞
  console.log(300);

//異步
  console.log(100);
    setTimeout(function(){
        console.log(200);
    },1000);
  console.log(300);

//加載示例
console.log("start");
var img = document.createElement("img");
img.onload = function(){
    console.log("loaded");
}
img.src = "/xxx.png";
console.log("end");
2.同步任務(wù)和異步任務(wù)的優(yōu)先順序

JS是單線程的,即在同一時(shí)間只能做一件事。從上到下執(zhí)行。

任務(wù)隊(duì)列:分同步任務(wù)、異步任務(wù)(setTimeout()、setInterval(),異步任務(wù)要掛起,同步任務(wù)全部執(zhí)行完再執(zhí)行異步任務(wù))。

Event Loop:同步任務(wù)放在運(yùn)行棧里邊全部執(zhí)行,遇到異步任務(wù)先掛起,等到時(shí)間到了的時(shí)候(即使是0,瀏覽器最小的是4毫秒),Timer模塊會(huì)把他放到異步隊(duì)列中,當(dāng)js引擎發(fā)現(xiàn)運(yùn)行棧里邊的同步任務(wù)全部執(zhí)行完后,再去讀異步任務(wù)隊(duì)列,發(fā)現(xiàn)里邊有東西后,讀出來(lái)放到運(yùn)行棧中執(zhí)行,此時(shí)setTimeout函數(shù)體就變成了運(yùn)行棧中的同步任務(wù),執(zhí)行完后,??樟耍偃ケO(jiān)聽(tīng)異步隊(duì)列中有沒(méi)有,如果有,再去執(zhí)行。這個(gè)循環(huán)過(guò)程就叫做event loop。

1.執(zhí)行棧執(zhí)行的是同步任務(wù)。

2.什么時(shí)候向異步隊(duì)列中 取 任務(wù)。

3.什么時(shí)候往異步隊(duì)列中 放 任務(wù)。

什么時(shí)候開(kāi)啟異步任務(wù)?

setTimeout和setInterval;

DOM事件(js的addEventListener,先注冊(cè)函數(shù)體,觸發(fā)時(shí)放入異步任務(wù)隊(duì)列,再執(zhí)行;eg:點(diǎn)擊某一按鈕瀏覽器卡死);

es6中的Promise。

     // 1.打印出順序?yàn)?、3、2
    console.log(1);
    setTimeout(function(){//setTimeout異步任務(wù)要掛起,同步任務(wù)全部執(zhí)行完再執(zhí)行異步任務(wù)
        console.log(2);
    },0);//4毫秒延遲
    console.log(3);

    // 2.只輸出a,while(true)是同步任務(wù),一直在執(zhí)行
    console.log("a");
    while(true){

    }
    console.log("b");

    // 3.只輸出A,同步任務(wù)全部執(zhí)行完再執(zhí)行異步任務(wù)
    console.log("A");
    setTimeout(function(){
        console.log("B");
    },0);
    while(1){
        
    }
3.異步任務(wù)(隊(duì)列)的放入時(shí)間和執(zhí)行時(shí)間
    
    // 輸出四個(gè)4,for循環(huán)是個(gè)同步任務(wù)
    for(var i=0;i<4;i++){
        setTimeout(function(){//到1s時(shí),Timer模塊才將其放入異步任務(wù)隊(duì)列中(放入時(shí)間),等待事件循環(huán)執(zhí)行(執(zhí)行時(shí)間)
            console.log(i);
        },1000);
    }
4.一道面試題
//1.setTimeout()異步任務(wù)

for(var i=0;i<5;i++){
    setTimeout(function(){
        console.log(new Date,i);
    },1000);
}
console.log(new Date,i);

//運(yùn)行結(jié)果
Thu Mar 15 2018 17:40:52 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5

Thu Mar 15 2018 17:40:53 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5
Thu Mar 15 2018 17:40:53 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5
Thu Mar 15 2018 17:40:53 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5
Thu Mar 15 2018 17:40:53 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5
Thu Mar 15 2018 17:40:53 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5


//2.立即執(zhí)行函數(shù)

for(var i=0;i<5;i++){
    (function(j=i){
       setTimeout(function(){
         console.log(new Date,j);
       },1000);//此處為1000
    })(i);
}
console.log(new Date,i);

//運(yùn)行結(jié)果
Thu Mar 15 2018 17:46:53 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5

Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 0
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 1
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 2
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 3
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 4


//3.默認(rèn)4毫秒延遲
for(var i=0;i<5;i++){
    (function(j=i){
       setTimeout(function(){
         console.log(new Date,j);
       },0);//此處為0
    })(i);
}
console.log(new Date,i);

//運(yùn)行結(jié)果
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 5

Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 0
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 1
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 2
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 3
Thu Mar 15 2018 17:46:54 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) 4

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

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

相關(guān)文章

  • JS核心知識(shí)點(diǎn)梳理——異步,單線程,運(yùn)行機(jī)制

    摘要:引言學(xué)習(xí)的時(shí)候,經(jīng)常聽(tīng)人說(shuō),即是異步的,又是單線程的。所以我們說(shuō)是異步單線程的。參考從瀏覽器多進(jìn)程到單線程,運(yùn)行機(jī)制最全面的一次梳理運(yùn)行機(jī)制詳解再談異步機(jī)制詳解運(yùn)行原理解析并發(fā)模型與事件循環(huán) showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 學(xué)習(xí)javascipt的時(shí)候,經(jīng)常聽(tīng)人說(shuō),javascipt即是異步...

    TANKING 評(píng)論0 收藏0
  • 從瀏覽器多進(jìn)程到JS單線程,JS運(yùn)行機(jī)制最全面的一次梳理

    摘要:如果看完本文后,還對(duì)進(jìn)程線程傻傻分不清,不清楚瀏覽器多進(jìn)程瀏覽器內(nèi)核多線程單線程運(yùn)行機(jī)制的區(qū)別。因此準(zhǔn)備梳理這塊知識(shí)點(diǎn),結(jié)合已有的認(rèn)知,基于網(wǎng)上的大量參考資料,從瀏覽器多進(jìn)程到單線程,將引擎的運(yùn)行機(jī)制系統(tǒng)的梳理一遍。 前言 見(jiàn)解有限,如有描述不當(dāng)之處,請(qǐng)幫忙及時(shí)指出,如有錯(cuò)誤,會(huì)及時(shí)修正。 ----------超長(zhǎng)文+多圖預(yù)警,需要花費(fèi)不少時(shí)間。---------- 如果看完本文后,還...

    wanghui 評(píng)論0 收藏0
  • JS核心知識(shí)點(diǎn)梳理——上下文、作用域、閉包、this(上)

    摘要:引言滿滿的干貨,面試必系列,參考大量資料,并集合自己的理解以及相關(guān)的面試題,對(duì)核心知識(shí)點(diǎn)中的作用域閉包上下文進(jìn)行了梳理。如果在小區(qū)這個(gè)作用域找到了張老師,我就會(huì)在張老師的輔導(dǎo)下學(xué)鋼琴我張老師房間鋼琴構(gòu)成了學(xué)琴的上下文環(huán)境。 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 滿滿的干貨,面試必bei系列,參考大...

    Andrman 評(píng)論0 收藏0
  • NodeJs+Express+Mysql + Vuejs 項(xiàng)目實(shí)戰(zhàn) - 大綱

    摘要:多一個(gè)技能多一條出路,祝你在自學(xué)道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項(xiàng)目實(shí)戰(zhàn) 最近準(zhǔn)備寫(xiě)一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開(kāi)發(fā)前后端完全分離項(xiàng)目; 文筆及技術(shù)可能在某些方面欠佳,請(qǐng)您指正,共同學(xué)習(xí)進(jìn)步 前端:Vuejs全家桶 后端:...

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

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

0條評(píng)論

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