亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 如何理解JS的單線程?

如何理解JS的單線程?

來源:千鋒教育
發布人:wjy
時間: 2022-08-11 13:56:16 1660197376

  JS本質是單線程的。也就是說,它并不能像JAVA語言那樣,兩個線程并發執行。

  但我們平時看到的JS,分明是可以同時運作很多任務的,這又是怎么回事呢?

  首先,JS的代碼,大致分為兩類,同步代碼和異步代碼。

  console.log(1)

  console.log(2)

  console.log(3)

  這是典型的同步代碼,編寫順序就是執行順序。

  JS引擎的主線程負責執行代碼,由于只有這一個線程,執行當然是同步的,即按照順序來。

  另外,還有一個叫做任務隊列的東西,所有的異步代碼都是從隊列當中來。

如何理解JS的單線程1

  

 

 

  所以實際上我們會發現,JS根本不可能同時執行兩個任務,本質上還是單線程。

  在JS中,所謂的異步任務,有三種:

  第一, 鼠標鍵盤事件觸發,例如onclick、onkeydown等等

  第二, 網絡事件觸發,例如onload、onerror等等

  第三, 定時器,例如setTimeout、setInterval

  因為這些任務的發生都不是在當下,而是過段時間以后再執行。因此時間不可控,你不能因為5秒后要執行一個函數,就讓主線程閑置5秒什么都不干吧?所以你只能繼續執行后續的同步代碼。而當你單擊鼠標或滾動窗口時,主線程可能正在執行其它代碼,忙著呢!沒工夫處理,因此,事件觸發線程就負責來接收這個事件,并把要執行的任務暫時保存在任務隊列當中。等主線程把手里的同步代碼執行完,就立刻會向任務隊列提取最新的任務。

  這也就解釋了為什么我們總把JS的異步函數叫做回調了,因為真的不是馬上執行,而是回頭再調的!

  我們來看個簡單的例子:

  setTimeout(“console.log(2)”, 0);

  console.log(1);

  反復執行這段代碼,結果都是先打印1再打印2

  因為,setTimeout是個異步任務,第二個參數真正的含義是,在0毫秒之后,將代碼插入任務隊列,而不是在0毫秒之后執行。

  當插入任務隊列后,主線程會繼續執行后續的代碼,也就是打印結果1,如果此時當前的同步代碼已經執行完畢,則主線程立刻會從任務隊列中取出最新任務執行。再打印結果2。

  平時我們使用定時器,時間往往不準確,就是因為在加入任務隊列時,前面可能已經有好多任務在排隊了,你明明寫了80ms的延遲,可是卻等了100ms才出現結果。

  同時,我們也理解了,為什么setInterval的時間間隔不能設為0,一般情況下瀏覽器允許的最小值為16ms,因為如果設成0的話,對于瀏覽器來講,壓力簡直太大了,定時器觸發線程會玩命兒的往隊列中插入任務,而不是完成一個再插入一個。

  我們再看一個關于ajax的例子

  var req = newXMLHttpRequest();

  req.open(“get“, “http://xxxxxxxx“);

  req.onload =function(){......}

  req.send();

  send方法和onload可以交換順序嗎?

  實際上完全沒有影響。

  為什么說send方法和onload交換順序完全沒有問題呢?

  因為send是一個異步方法,也就是當我們把代碼寫成這樣:

  var req = newXMLHttpRequest();

  req.open(“get“, “http://xxxxxxxx“);

  req.send();

  req.onload =function(){......}

  主線程在send方法執行時,由于是異步方法,因此它不會立刻執行,而是存入任務隊列,然后繼續向下執行代碼,添加onload事件。所以send方法無論如何都會在添加onload事件之后再執行,因此順序顛倒是無關要緊的。不過需要提醒的是,onload事件在添加時,并不會加入任務隊列,而是通知網絡事件觸發線程,一旦網絡請求結束,事件被觸發,該線程便會立刻向任務隊列中加入這個onload函數,從而完成回調。

  最后我們用一個完整的例子來觀察一下JS如何以單線程執行代碼

  setTimeout( a, 0);

  setInterval( b,500);

  for(......){

  //假設循環執行了大量操作,花費時間1000ms

  //而在for循環執行期間,用戶通過鼠標觸發了一次單擊事件

  }

  console.log(123);

  setInterval(c,250);

  那么任務隊列的情況如下:

如何理解JS的單線程2

 

  我們按順序來解釋一下:

  任務a,由于延遲為0,則以最短時間立即加入隊列。

  任務b,等待500ms后,加入隊列,此時for循環運行過半

  任務click,由于發生在for循環執行期間,所以此時出現

  任務b,for循環結束時,又過了500ms,因此加入b

  任務c,從for循環結束時開始計時,250ms后加入c

  任務c,因為又過了250ms

  任務b,與此同時,距離上次加入b間隔為500ms,因此加入b

  往后,每出現兩次c,出現一次b

  OK!今天的課到此結束!

  更多關于html5培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
欧美XXXX做受欧美| 精品无码中文字幕不卡| 精产国品一二三产品99| 麻豆国产在线精品国偷产拍| 青草伊人久久综在合线亚洲观看| 日韩AV无码社区一区二区三区| 无码人妻AⅤ一区二区三区夏目| 亚洲精品成人片在线播放| 最新中文AV岛国无码免费播放| 伴郎粗大的内捧猛烈进出| 国产精品一区二区 尿失禁| 久久精品国产2020观看福利| 欧美日韩一区二区在线视频精品| 四虎永久在线精品免费网址| 亚洲国产精品一区二区久久HS | 国产偷国产偷亚洲清高网站 | 国产精品毛片无遮挡| 久久WWW成人_看片免费不卡| 欧洲熟妇色XXXXⅩ| 亚洲AⅤ无码一区二区三区| 中文字幕V亚洲ⅤV天堂| 父母儿女一家换着玩的文案| 精品人人妻人人爽D∨D| 人妻中文无码就熟专区| 亚洲AV永久无码精品一区二区国 | 日本边添边摸边做边爱喷水| 亚洲AV涩涩涩成人网站在线播放| 18禁白丝JK自慰喷水无码| 国产成人精品人人2020视频| 久久麻豆精亚洲AV品国产APP| 日韩人妻中文字幕2021视频| 亚洲人成网站18禁止大| 被公疯狂玩弄的漂亮人妻| 极品性荡少妇一区二区色欲| 强伦姧人妻三上悠亚中文字幕| 亚洲AV毛片成人精品| BGMBGMBGM胖老太太XX| 国产性夜夜春夜夜爽| 欧美大肚子孕妇疯狂作爱视频| 午夜三级理论在线观看高清| 中文字幕无码视频手机免费看| 国产精品久久久久精品麻豆| 男人猛躁进女人免费播放| 亚洲AV成人精品日韩一区麻豆 | 男人猛戳女人30分钟视频大全| 西方37大但人文艺术A管77| 99国精产品灬源码1| 国色天香果冻传媒国卡1区| 人妻丰满妇岳av无码区HD| 亚洲乱码日产精品BD在线| 大BBW大BBW超大BBW| 老师上课跳D突然被开到最大视频| 调教秘书跪趴撅起来打光屁股作文 | 亚洲亚洲人成综合网络| 国产SUV精品一区二区五| 免费无码AV片在线观| 亚洲国产精品久久久久蜜桃| 反差婊吃瓜黑料热门网曝| 老狼老狼芦苇芭蕉| 亚洲AV无码成人精品网站漏男| 被带到调教室刑床惩罚挠痒痒作文| 久久国产情侣露脸精品| 无码国产伦一区二区三区视频| ChineSe玩弄老年熟妇| 久久精品国产99精品亚洲蜜桃| 婷婷久久综合九色综合| JAPANESE春药高潮| 久久寂寞少妇成人内射| 午夜福利视频合集1000| 成人午夜福利视频| 年轻漂亮的女邻居观看在线视频| 亚洲精品中文字幕无码专区 | 久久天天婷婷五月俺也去 | 国产亚洲曝欧美不卡精品| 日韩精品无码免费专区午夜不卡| 自偷自拍亚洲综合精品麻豆| 精品久久免费一区二区三区四区 | 日韩人妻不卡一区二区三区| 坐着轮流提双腿能起到什么效果 | 亚洲AV综合色区无码三区30p | 色噜噜狠狠色综合成人网| 97久久精品亚洲中文字幕无码| 精品国产乱码久久久久久蜜桃网站| 天堂8在线天堂资源在线| 爆乳上司JULIA中文字幕| 免费看又黄又无码的网站| 亚洲视频无码高清在线| 黑人巨根后入娇小女孩| 无码人妻丰满熟妇啪啪网不卡| 冲动的惩罚动漫HD在线播放| 欧美一级 片内射欧美乱强| 专干熟肥老妇人视频在线看| 久久天天躁狠狠躁夜夜96流白浆 | 思思久久99热只有频精品66| 白种女BBWBBWBBW| 欧美老熟妇手机在线观看| 中文字幕一本性无码| 久久久亚洲熟妇熟女ⅩXXX直播| 亚洲AV无码一区二区三区天堂| 国产精品久久久久9999不卡| 少妇无码一区二区三区免费| 成人拳交喷水在线播放| 欧洲一卡2卡三卡4卡 乱码| 99久久国产综合精品女| 免费网站看V片在线18禁| 在线亚洲人成电影网站色WWW | 中国人妻被两个老外三P| 久久久久亚洲AV无码专区桃色 | 国产精品爽爽VA在线观看| 私人影院播放器大全| 公车上双乳被老汉揉搓玩弄漫画| 日产2021免费一二三四| 潮喷大喷水系列无码久久精品| 色欲色香天天天综合无码| 真实的国产乱XXXX在线| 精品无人区卡一卡二卡三 | 无码AVAV无码中文字幕| 肥臂熟妇高潮一区二区三区| 日日噜噜噜夜夜爽爽狠狠| 扒开两腿中间缝流白浆在线看 | 亚洲6080YY久久无码产自国| 国产日韩一区在线精品 | 2021国产精品国产精华| 男生和女生在一起差差差| 48熟女嗷嗷叫国产毛片小说| 女教师娇喘潮喷抽搐在线视频| 50熟妇的长奶头满足了我| 男生坤坤放在女生坤坤叫什么| 97国产精华最好的产品| 欧美亚洲国产精品久久高清| 啊灬啊灬啊灬快高潮了网站 | 亚洲成AV人片乱码色午夜| 姬小满乳液狂飙奖励自己| 亚洲日本人成网站在线播放| 久久精品国产色蜜蜜麻豆| 伊在人亚洲香蕉精品区| 男朋友把舌头都伸进我的嘴巴里了 | 吃饭时把腿张开故意让公| 十八禁啪啪污污网站免费下载| 国产交换配乱婬视频| 亚洲AV韩Av无码色老头| 精品人妻VA出轨中文字幕| 一区二区三区在线 | 日| 女性C春合欢液高朝液精华液| MM131美女图片尤物写真丝袜| 日韩精品内射视频免费观看| 国产成人V在线免播放观看| 亚洲AⅤ永久无码一区二区三区| 皇上骑带木棒的早朝| 伊人久久精品无码麻豆一区| 欧美成人区精品一区二区婷婷| 被吊起来张开腿供人玩弄| 偷窥 性别 瘾 XXXXX| 教室停电了校草挺进我体内 | 前夫6天要了我25次| 公的大龟慢慢挺进我的体内| 亚洲AV成人AV天堂| 久久天堂综合亚洲伊人HD妓女| AV人摸人人人澡人人超碰手机版 | 公和熄洗澡三级在线观看| 亚洲AV成人无码久久精品 | 国产美足白丝榨精在线观看sm| 亚洲精品无码久久久久SM| 猫咪成人网站WWW永久网站| 被夫の上司に犯中文字幕| 午夜A级成人免费毛片| 久久久99精品成人片| 99久久精品国产一区二区| 试看120秒男女啪啪免费| 娇妻初尝粗大滋味借种韩国电影| 中文字幕人妻色偷偷久久| 人人爽天天碰天天躁夜夜躁| 国产精品久久久久这里只有精品| 亚洲人ⅤSAⅤ国产精品| 欧洲肉欲K8播放毛片| 国产裸拍裸体女网站链接在线观看| 亚洲线精品一区二区三区| 欧洲精品成人免费视频在线| 国产精品无码AV不卡| 一区二区三区AV| 日韩一区二区三区AV| 激情综合色综合久久综合| 99国产精品久久99久久久| 天堂А√在线地址资源| 久久精品WWW人人做人人爽| 把舌头伸进她腿间花缝| 亚洲AV无码二区一区二十六区| 免费观看电视在线高清| 国产AⅤ激情无码久久男男剧| 亚洲日韩AV无码一区二区三区人| 全免费A级毛片免费看网站| 国精产品一区一区三区有限| 97日日碰人人模人人澡| 无人区免费一二三四乱码| 蜜臀AV网站在线观看| 国产成人一区二区三区| 永久免费AV无码网站性色AV| 十八禁啪啪污污网站免费下载 | chinese老女人老熟妇hd| 亚洲H在线播放在线观看H|