javascript setInterval的内存泄漏

时间:2011-04-11 12:26:51

标签: javascript performance timeout

这两个陈述之间是否有任何区别

setInterval(animateImage, 1000);

or 

setInterval('animateImage()', 1000);

浏览器js引擎是否会解释第二个语句是否会导致内存泄漏或性能问题。 setTimeout()调用的情况也是如此。该应用程序使用4个定时器调用,间隔为1-2秒。

5 个答案:

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

传递参数而不是在末尾传递

相关问题