js引擎在执行的时候是单线程的,这是大家都知道的。我们先来看一段代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>JavaScript</title> <script>
//第一段 for (var i = 10000; i >= 0; i--) { console.log(i); } </script> <script>
//第二段 var node = document.createElement('script'); node.src="js/async.js"; node.type="text/javascript"; document.head.appendChild(node); </script>
//第三段 <script src="js/sync.js" type="text/javascript"></script> </head> <body> </body> </html>
//async.js代码:
console.log('async!');
//sync.js代码:
console.log('sync!'); setTimeout(function(){ console.log('setTimout run!'); },1000);
大家觉得执行顺序是什么?
输出:10000-0 sync! async! setTimout run!
从执行可以看出,主程序是一直在向下执行。setTimeout和create js都是异步操作,会被放到主线程的执行队列的最后,只有主线程空闲了,才会执行异步队列里的内容。
那么总结一下,哪些操作是异步操作呢?
1.ajax
2.setTimeout/setInternel
3.websocket
4.异步加载js
5.DOM事件、IO输入
能想到的有这些,有漏掉的再补上!