首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

证实JS中window.setTimeout函数为单线程

2012-11-22 
证明JS中window.setTimeout函数为单线程网上说JS是单线程执行的,所以不存在异步的问题,于是自己设计了一个

证明JS中window.setTimeout函数为单线程

网上说JS是单线程执行的,所以不存在异步的问题,于是自己设计了一个小例子来证明(如设计不够严谨,欢迎拍砖):

思路是:

     假设是多线程,

     主线程执行start()函数,启动setTimeout后,自己休眠10秒钟后输出i的值===》为10子线程一秒钟将n加1

   预期:如果是多线程,那主线程结束的时候(即跳出警告窗口时),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>


2楼qiushi888昨天 18:52
console.log(new Date());nsleep(1000);nconsole.log(new Date())nMon Nov 19 2012 18:56:15 GMT+0800 (CST)nMon Nov 19 2012 18:56:16 GMT+0800 (CST)n1秒钟不到就执行完了。。。。
1楼qiushi888昨天 18:48
你的sleep函数 确定可以让程序 听下来 10s?

热点排行