javascript為什么是單線程
為了避免復(fù)雜性(如:時(shí)有兩個(gè)線程,一個(gè)線程在某個(gè)DOM節(jié)點(diǎn)上添加內(nèi)容,另一個(gè)線程刪除了這個(gè)節(jié)點(diǎn),這時(shí)瀏覽器應(yīng)該以哪個(gè)線程為準(zhǔn)?)
html5允許JavaScript腳本創(chuàng)建多個(gè)線程,但是子線程完全受主線程控制,且不得操作DOM。所以,并沒有改變JavaScript單線程的本質(zhì)。
任務(wù)隊(duì)列(task queue)
同步(synchronous)
主線程上排隊(duì)的任務(wù),b任務(wù)如果排在a任務(wù)后面,只能乖乖等a完成后再執(zhí)行b任務(wù)。
異步(asynchronous)
a是一個(gè)異步調(diào)用api方法,
主線程執(zhí)行到它時(shí),它先發(fā)一個(gè)請(qǐng)求給服務(wù)器,a的回調(diào)直接被放到任務(wù)隊(duì)列中,主線程繼續(xù)往下執(zhí)行,直到主線程的同步任務(wù)全部完成,再從任務(wù)隊(duì)列中調(diào)出異步任務(wù)
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function (){};
req.onerror = function (){};
req.send();