16 回答

TA贡献1842条经验 获得超21个赞
setTimeout的作用是将指定的代码段在指定的时间中加入执行队列。
简单的做法是使用setInterval。
你的代码等价于:
window.onload = function() { var i = 0; for(var j = 0;j < 10;j++) { setTimeout(new Function(console.log(i)),10000*i); i++; } };
所以就直接执行完了。
正确的写法是:
window.onload = function() { var i = 0; for(var j = 0;j < 10;j++) { setTimeout(function(){console.log(i);i++;},10000*j); } };

TA贡献1817条经验 获得超14个赞
首先谢谢你的回答~其实setInterval的实现我已经完成了,以下是完整代码。我只是对setTimeout的相同功能实现比较好奇。而且重点是我没有彻底弄明白,为什么我之前那样写setTimeout看不到延迟效果。
window.onload = function() { var i = 0; var bar = setInterval(test,1000); function test() { console.log(i); i++; if(i == 10) { clearInterval(bar); } } };

TA贡献1802条经验 获得超4个赞
使用setTimeout本身是没有任何问题,通过时间间隔,同样可以实现。但,第一个参数需要注意,需要使用function代替,而不是直接把代码写在里面。setTimeout(function(){console.log(i)},10000*i);,大概浏览器需要解析吧。第二种方式,使用字符串代替函数体,setTimeout("console.log(1)",10000*i);。可以实现同样的效果。

TA贡献1828条经验 获得超6个赞
不好意思,我在chrome和FF下测试,输出结果都是1~9,完全不符预期。代码是这样子的(简化版)
<!doctype html> <html> <head> <script> window.onload = function() { var i=0; var max=9; function incrementNum(){ i++; console.log(i); if(i<max){ setTimeout(incrementNum,1000*i); }else{ clearTimeout(incrementNum); } } incrementNum(); } </script> <head> <body> </body> <html>
能具体说下你那边的实际情况吗?^_^

TA贡献1812条经验 获得超5个赞
@Canrz: 不好意思,没有找到原因。根据检测只是知道,这个undefined是firebug抛出的一个警告,并不是其它原因(如setTimeout)造成的,因为即使运行如下代码也是会有undefined输出,再过分一点只有“var a = 0;”的字样也是会有undefined的输出。~应该是firebug的原因,学术浅薄具体不详>_<,抱歉。
function test() { console.log("1"); } test();

TA贡献1757条经验 获得超7个赞
@Iwillknow:额 ,如果去掉test(),单独跑
function test() { console.log("1"); }
就会输出一个undefined。
你前面说的“在chrome和FF下测试,输出结果都是1~9,完全不符预期”是什么情况,我firebug和浏览器单开都是隔段时间输出一个数字
添加回答
举报