日期:2014-05-16  浏览次数:20485 次

关于setTimeout()和setInterval()的执行顺序
setInterval(function() {
  alert("setInterval")
},0);

setTimeout(function() {
  alert("setTimeout")
},0);

alert(0)
此代码让我甚是纠结,以前还没有怎么注意。这个的执行顺序是会先输出0 然后输出setTimeout 最后循环输出setInterval。难道存在了多线程同时进行???那这个真没有办法测试了。但是javascript应该不会有多线程的啊。不知道是哥们才疏学浅还是问题实在严重??求解 

按道理应该是从上面执行到下面啊。。。

------解决方案--------------------
楼主我给你测试了下,你也可以测试,测试代码和测试数据如下,
多次刷新页面数据
第1组
aaa1340779648827
setInterval1340779648847
setTimeout1340779648847
2
aaa1340779997024
setInterval1340779997042
setTimeout1340779997041
3
aaa1340780041782
setInterval1340780041800
setTimeout1340780041799
4
aaa1340780057829
setInterval1340780057847
setTimeout1340780057847
...等等
因为setInterval会一直执行毫秒数跑飞快所以用funce();促使执行到这里报错,还有包含了setTimeout和setInterval不是从上往下执行,是执行完其它js才执行者2个函数。也就是说页面加载完成才执行这2个方法
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
</body>
</html>
<script type="text/javascript">
setTimeout(function () {
var date = new Date().getTime();
document.getElementById("div3").innerHTML = "setTimeout" + date;
}, 0);
setInterval(function () {
var date = new Date().getTime();
document.getElementById("div2").innerHTML = "setInterval" + date;
funce();
}, 0);
var date = new Date().getTime();
document.getElementById("div1").innerHTML = "aaa" + date;
</script>
------解决方案--------------------
那这我也不清楚了,没想过这方面的问题,这你得去研究javascript更深的一层或查阅下有这方面的资料没
------解决方案--------------------
js定时器不是阻塞式的,不会阻塞主线程,所以先执行alert(0)是理所当然的
至于两种计时器的先后就不清楚了,一般也不会像你那样定相同的时间触发吧

不是多线程,但类似多线程(伪多线程)