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