这两个陈述之间是否有任何区别
setInterval(animateImage, 1000);
or
setInterval('animateImage()', 1000);
浏览器js引擎是否会解释第二个语句是否会导致内存泄漏或性能问题。 setTimeout()
调用的情况也是如此。该应用程序使用4个定时器调用,间隔为1-2秒。
答案 0 :(得分:6)
最大的区别是第二个语句将导致animateImage()
在全局范围内进行评估。
如果
,这可能会导致问题animateImage
不在全球范围内animateImage
必须访问不在全局范围内的变量E.g。以下不工作:
function foo() {
var answer = 42;
function bar() {
alert(answer);
}
setTimeout('bar()', 1000);
}
foo();
实际上没有理由使用第二个语句,因此关于内存泄漏的问题不再相关;)
显然,传递对函数的直接引用将比eval
使用字符串“更快”。
答案 1 :(得分:3)
使用第一个。它使调试更好,因为没有涉及eval'd代码,它更快更干净。 Eval是邪恶的,尽可能避免使用它。
如果您需要传递参数,请使用以下代码:
setInterval(function() {
animateImage(...);
}, 1000);
答案 2 :(得分:2)
第二个语句可能稍慢并且使用更多内存,但无论如何都不会很重要。您应该使用第一个,因为通常最好避免使用eval
。
答案 3 :(得分:0)
我不这么认为。您希望使用回调来避免内存泄漏。
答案 4 :(得分:0)
我建议像这样使用它:
setInterval(function(param1, param2){animateImage(param1, param2)}, 1000);
传递参数而不是在末尾传递