理解js异步的概念

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输入

能想到的有这些,有漏掉的再补上!

原文地址:https://www.cnblogs.com/freefish12/p/5535064.html