function help(n){
document.write(n + '<br/>');
if(n==10){ n=1;}
n++;
main(n);
}
function main(n){
setTimeout('help(n)',500);
}
我希望它打印
1 2 3 4 5 6 7 8 9 10
然后再次
1 2 3 4 5 6等
0.5秒后
我想使用setTimeout
方法执行此操作,但此方法根本不起作用
我的身体元素就像这样
<body onload='main(1)'>
有人可以解释我为什么吗?
修改:我更改了foo
方法以提供帮助。我在编辑代码时犯了一个错误,以便发布这个问题。
答案 0 :(得分:3)
我相信你可能得到的原因:
Firebug中的尝试在已清除的范围上运行compile-and-go脚本
是由于在页面加载后使用document.write()
。这也是appears to be一个新的Firebug JS错误。
最初运行后,您将在允许之后写入文档。我尝试使用document.open()
和document.close()
,并且添加两者都没有解决问题。
但有更好的方法。您可以使用它来替换{{1}}内容:
body
或者添加它:
document.body.innerHTML = n + '<br/>;
或者,这(我建议):
document.body.innerHTML += n + '<br/>;
注意,不要使用var div = document.createElement('div');
div.innerHTML = n + '<br/>';
document.body.appendChild(div);
,因为setTimeout('help(n)',##)
代码调用函数,这是不好的做法。另外,请避免使用上面的第二个示例,因为在某些浏览器中,由于eval()
附加到节点的方式,您可能会遇到性能问题。因此,这是另一个要避免的不良做法。
第三种方法的演示如下。
.innerHTML
答案 1 :(得分:1)
function main(n){
setTimeout(help,500,n);
}
或完全兼容IE:
function main(n){
setTimeout(function(){
help(n);
},500);
}
答案 2 :(得分:0)
您的setTimeout
正在调用一个不存在的函数foo()
。
答案 3 :(得分:0)
setTimeout采用函数引用,而不是字符串。尝试类似:
function main(n)
{
setTimeout(function () {
help(n);
}, 500);
}
修改强>
setTimeout
可以取一个字符串,但此函数不会在main
的闭包内运行,而n
将超出范围。另外,强烈建议使用函数引用,如上例所示。
答案 4 :(得分:0)
n
不再在范围内。您的main
应该执行以下操作:
function main(n) {
window.setTimeout(function() {
help(n);
}, 500);
}