当前位置:编程学习 > JS >>

证明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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,