摘要:任務(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
摘要:引言學(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即是異步...
摘要:如果看完本文后,還對(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í)間。---------- 如果看完本文后,還...
摘要:引言滿滿的干貨,面試必系列,參考大量資料,并集合自己的理解以及相關(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系列,參考大...
摘要:多一個(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全家桶 后端:...
閱讀 2958·2021-11-23 09:51
閱讀 1675·2021-10-15 09:39
閱讀 1068·2021-08-03 14:03
閱讀 2897·2019-08-30 15:53
閱讀 3445·2019-08-30 15:52
閱讀 2495·2019-08-29 16:17
閱讀 2801·2019-08-29 16:12
閱讀 1657·2019-08-29 15:26