繁体   English   中英

javascript setInterval的内存泄漏

[英]Memory leak for javascript setInterval

这两个陈述之间有什么区别吗?

setInterval(animateImage, 1000);

or 

setInterval('animateImage()', 1000);

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

最大的区别是第二个语句将导致animateImage()在全局范围内进行评估。

这可能会导致问题

  • animateImage不在全局范围内
  • animateImage必须访问不在全局范围内的变量

例如,以下将不起作用

function foo() {
    var answer = 42;
    function bar() {
        alert(answer);
    }
    setTimeout('bar()', 1000);
}

foo();

实际上没有理由使用第二个语句,因此关于内存泄漏的问题不再相关;)

显然,传递对函数的直接引用将比eval字符串“更快”。

使用第一个。 它使调试更好,因为没有涉及eval'd代码,它更快更干净。 Eval是邪恶的,尽可能避免它是好的。

如果您需要传递参数,请使用以下代码:

setInterval(function() {
    animateImage(...);
}, 1000);

第二个语句可能会稍微慢一点并使用更多内存,但无论如何都不会很重要。 您应该使用第一个,因为通常最好避免使用eval

我不这么认为。 您希望使用回调来避免内存泄漏。

我建议像这样使用它:

setInterval(function(param1, param2){animateImage(param1, param2)}, 1000);

传递参数而不是在最后传递它们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM