代码:
setInterval("doSomething()", 2000);
function doSomething(){alert('hi')}
我一直reading about this而且我无法让这个例子起作用:(
答案 0 :(得分:8)
由于jsfiddle,您的代码未执行。它将您的代码包装在onload处理程序中,从而将doSomething
保留在全局命名空间之外。因此,当setTimeout尝试执行您的代码时,它找不到doSomething
。更改jsfiddle以执行“no wrap”,一切顺利:http://jsfiddle.net/gilly3/PRff7/3/
如果您未将字符串中的doSomething
打包,它也会有效,因为setInterval
会直接引用同一范围内的doSomething
。它不需要全局参考。
答案 1 :(得分:3)
您需要将其更改为
setInterval(doSomething, 2000);
function doSomething(){alert('hi')}
答案 2 :(得分:2)
您不应将字符串传递给setInterval
。
相反,传递函数本身:
setInterval(doSomething, 1000);
答案 3 :(得分:1)
如果您希望将代码保留为内联,而不是将其委托给某个命名函数(特别是如果代码包含多个命令),请使用:
setInterval( function(){ alert('hi'); alert('hello') }, 2000);