js是单线程的;
js中的线程分为三种
1.页面渲染
2.主代码逻辑
3.事件触发;
下面我们来看一段代码
<script>
setTimeout(function(){
console.log(123);
},0);
</script>
按照js的api来看,上面的代码应该是0秒后执行,但真的是这样吗?
js中没有控制线程的,所以无法让线程进行睡眠;但我们可以用alert阻塞线程;
当我们在后面加alert后,我们看到,123并没有立刻输出;而是等待弹窗关闭后才输出;
在js中,遇到回调等都会将回调暂时挂起,等待主流程的执行完毕才会执行回调等函数;
看如下代码
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <script> 7 window.onload = function () { 8 var divs = document.getElementsByTagName("div"); 9 for (var i = 0; i < divs.length; i++) { 10 var div = divs[i]; 11 12 div.onclick = function () { 13 alert("我是第"+ (i+1) +"个div"); 14 }; 15 16 } 17 } 18 </script> 19 </head> 20 <body> 21 <div>我是第1个div</div> 22 <div>我是第2个div</div> 23 <div>我是第3个div</div> 24 <div>我是第4个div</div> 25 <div>我是第5个div</div> 26 <div>我是第6个div</div> 27 <div>我是第7个div</div> 28 <div>我是第8个div</div> 29 <div>我是第9个div</div> 30 <div>我是第10个div</div> 31 </body> 32 </html>