異步函數(shù)
-
誤區(qū):
- 把script代碼放到body底部并不是異步執(zhí)行js代碼,僅僅是讓頁面優(yōu)先解析然后再解析執(zhí)行js代碼(注意:到j(luò)s代碼執(zhí)行完之前頁面都沒有被渲染)
-
能做什么:
- 異步代碼(例如:setTimeout)是將代碼放入異步調(diào)用棧,然后等待執(zhí)行線程先渲染完頁面后(即同步代碼執(zhí)行完,html所有標(biāo)簽解析完)后執(zhí)行。所以耗時(shí)的操作(如xmlHttpRequest,大量計(jì)算等)都需要使用異步
-
總結(jié):
- 異步代碼其實(shí)質(zhì)就是事件驅(qū)動(dòng)+回調(diào),只不過該"事件"是由瀏覽器控制觸發(fā)
-
注意:
異步列隊(duì)其實(shí)質(zhì)還是串行列隊(duì),僅僅只是讓線程渲染完頁面后執(zhí)行,如果大負(fù)荷計(jì)算,頁面還是會(huì)假死(無法點(diǎn)擊按鈕等。。。)。
xmlHttpRequest(ajax)是由瀏覽器(并發(fā))執(zhí)行然后通過事件驅(qū)動(dòng)來回調(diào)我們的js代碼的,并非setTimeout這種簡(jiǎn)單的放到同步代碼后執(zhí)行。