簡體   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