证明JS中window.setTimeout函数为单线程
网上说JS是单线程执行的,所以不存在异步的问题,于是自己设计了一个小例子来证明(如设计不够严谨,欢迎拍砖):
思路是:
假设是多线程,
预期:如果是多线程,那主线程结束的时候(即跳出警告窗口时),n的值将等于11左右,肯定不等于2;
执行结果:主线程结束时,n的值仍为2.
结论:假设不成立,因此至少setTimeout是以单线程的回调实现的
<HTML><BODY onload="start()"><div> 值1:<span id="val1"> </span> </div><script type="text/javascript">function show(num){document.getElementById("val1").innerHTML = num;}function repeat(n){n++;show(n);window.setTimeout("repeat("+n+")",1000);}function start(){repeat(1);var i = 0;for(;i<10;i++){sleep(1000);}alert("值 i="+i);}function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) { now = new Date(); if (now.getTime() > exitTime) return; } } </script><BODY></HTML>