为什么这个javascript代码根本不起作用?

时间:2011-11-17 23:12:07

标签: javascript settimeout

  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方法以提供帮助。我在编辑代码时犯了一个错误,以便发布这个问题。

5 个答案:

答案 0 :(得分:3)

我相信你可能得到的原因:

  

尝试在已清除的范围上运行compile-and-go脚本

Firebug中的

是由于在页面加载后使用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

http://jsfiddle.net/be6He/1

答案 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);
}