javascript为什么是单线程
为了避免复杂性(如:时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?)
html5允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,并没有改变JavaScript单线程的本质。
任务队列(task queue)
同步(synchronous)
主线程上排队的任务,b任务如果排在a任务后面,只能乖乖等a完成后再执行b任务。
异步(asynchronous)
a是一个异步调用api方法,
主线程执行到它时,它先发一个请求给服务器,a的回调直接被放到任务队列中,主线程继续往下执行,直到主线程的同步任务全部完成,再从任务队列中调出异步任务
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function (){};
req.onerror = function (){};
req.send();