字面誤區(qū):1、js同步操作任務(wù),并非一起操作之意;2、js異步操作任務(wù),也并非是指在不同線程里做不同的事情。
在清徐等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),清徐網(wǎng)站建設(shè)費(fèi)用合理。
本質(zhì)理解:首頁js的語言執(zhí)行環(huán)境是單線程的,也就是一次只能完成一個(gè)任務(wù),多個(gè)任務(wù)就必須按照時(shí)間先后排隊(duì),前面完成后才能完成后一個(gè)任務(wù)。這個(gè)是js的常規(guī)模式,也就也是同步操作任務(wù)。
弊端:同步操作任務(wù)帶來的問題是,只要一個(gè)任務(wù)執(zhí)行時(shí)間過程,后面的任務(wù)都會排隊(duì)等待,拖延整個(gè)程序的執(zhí)行,如:常見的瀏覽器假死很可能就是js任務(wù)執(zhí)行時(shí)間太長導(dǎo)致。
為了解決同步操作帶來的弊端,js語言增加了異步任務(wù)的操作模式:當(dāng)前任務(wù)可以攜帶回一個(gè)回調(diào)函數(shù)(當(dāng)前任務(wù)執(zhí)行時(shí)間過長,把需要提前執(zhí)行的任務(wù)放在回掉中);可以利用setTimeout構(gòu)建異步任務(wù),讓主邏輯優(yōu)先執(zhí)行,對于耗時(shí)間長的任務(wù)可以放在setTimeout中異步執(zhí)行。所以異步操作任務(wù)主要是改變了程序的正常執(zhí)行操作順序。
如下:
執(zhí)行結(jié)果為:
1
5
2
3
4
那么大致的運(yùn)行機(jī)制如下:
(1)在js主程序(單線程)上的同步任務(wù)形成了一個(gè)主任務(wù)執(zhí)行棧
(2)主線程之外還存在一個(gè)任務(wù)隊(duì)列,這個(gè)隊(duì)列存在一些按時(shí)間順序存放的事件,如鼠標(biāo)點(diǎn)擊、計(jì)時(shí)觸發(fā)等,主線程中每出現(xiàn)一個(gè)異步任務(wù),任務(wù)隊(duì)列就會增加一個(gè)異步任務(wù)的事件
(3)一般執(zhí)行棧中的同步任務(wù)執(zhí)行完畢,系統(tǒng)就會讀取任務(wù)隊(duì)列,看看哪些事件是可以執(zhí)行的,一旦可以執(zhí)行將進(jìn)入執(zhí)行棧開始執(zhí)行
(4)不斷重復(fù)以上動(dòng)作