我见过以下工作! setinterval call。
window.setInterval('checkhash();', 1);
知道为什么会这样吗?
正常情况是这样的:
setInterval(function(){
do something
},1000);
function checkhash(){ };
答案 0 :(得分:6)
您有几种选择:
1)交出一个字符串然后进行评估(不好 - 永远不要这样做!)
window.setInterval('checkhash()', 4);
这基本上对像eval('checkhash()')
这样的字符串进行评估。
重要的是要知道,它是在全局上下文中进行评估的,因此以下将失败:
(function(){
function test(){alert("foo")};
function test2(){alert("bar")};
// will fail
setTimeout("test()",1000);
// will work
setTimeout(test2,1000);
})();
第一个超时将产生Uncaught ReferenceError: test is not defined
,因为test()
仅在您的匿名函数的上下文中已知,但在全局空间中不知道:
See example
2)交出功能参考(首选方式)
window.setInterval(checkhash, 4);
3)移交一个匿名函数(当你需要交出参数时使用)
setInterval(function(){
checkhash(param1,param2);
},4);
也可以执行以下操作(常见的初学者错误):
window.setInterval(checkhash(), 4);
这将立即调用函数并将返回值移交给指定时间后执行的超时。
重要说明:
4
ms,因此基本上0-3将为您提供至少4ms
的间隔(当然,取决于调度程序)。答案 1 :(得分:0)
这应该是,
window.setInterval(checkhash, 1);
删除你的引号,并按照这样做。
答案 2 :(得分:0)
这是所有JavaScript eval
情况之一,这不是一个好习惯,如果你使用string作为第一个参数,它会自动转换为这样的匿名函数:
Function('checkhash();')
那么为什么不将第一个参数作为一个函数传递,这是另一个选择,也是更合理的一个。
window.setInterval(function(){
checkhash();
}, 1);
或简单地说:
window.setInterval(checkhash, 1);
这种方式唯一的问题是有时您需要使用JavaScript closures来保证变量值的稳定。