[英]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.