证明JS中window.setTimeout函数为单线程
网上说JS是单线程执行的,所以不存在异步的问题,于是自己设计了一个小例子来证明(如设计不够严谨,欢迎拍砖):
思路是:
假设是多线程,
主线程执行start()函数,启动setTimeout后,自己休眠10秒钟后输出i的值===》为10
子线程一秒钟将n加1
预期:如果是多线程,那主线程结束的时候(即跳出警告窗口时),n的值将等于11左右,肯定不等于2;
执行结果:主线程结束时,n的值仍为2.
结论:假设不成立,因此至少setTimeout是以单线程的回调实现的
[html]
<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>
补充:web前端 , JavaScript ,