內存泄漏會出現第二條語句由瀏覽器JS引擎來解釋這2所陳述對JavaScript的setInterval
setInterval(animateImage, 1000);
or
setInterval('animateImage()', 1000);
之間的差額任何不同的方式,可能會導致內存泄漏或性能問題。呼叫setTimeout()
的情況也是如此。該應用程序使用4個定時器間隔1-2秒的呼叫。
內存泄漏會出現第二條語句由瀏覽器JS引擎來解釋這2所陳述對JavaScript的setInterval
setInterval(animateImage, 1000);
or
setInterval('animateImage()', 1000);
之間的差額任何不同的方式,可能會導致內存泄漏或性能問題。呼叫setTimeout()
的情況也是如此。該應用程序使用4個定時器間隔1-2秒的呼叫。
最大的區別在於第二個語句將導致animateImage()
在全局範圍內進行評估。
這可能導致問題,如果
animateImage
是不是在全球範圍內animateImage
有權訪問不在全球範圍內例如變量下面將不工作:
function foo() {
var answer = 42;
function bar() {
alert(answer);
}
setTimeout('bar()', 1000);
}
foo();
其實從來就沒有理由使用第二個語句,因此關於內存泄漏問題是不再相關;)
很顯然,通過直接引用到一個函數將會比'eval
'更快。
第二個聲明將可能會稍微慢一點,並使用更多的內存,但它不會顯着的任何方式。無論如何,你應該使用第一個,因爲通常最好避免使用eval
。
使用第一個。它使調試更好,因爲沒有涉及代碼,它更快,更乾淨。 Eval是邪惡的,只要有可能就避免它。
如果你需要傳遞一個參數,使用下面的代碼:
setInterval(function() {
animateImage(...);
}, 1000);
我不這麼認爲。你想使用回調來避免內存泄漏。
我建議使用它像這樣:
setInterval(function(param1, param2){animateImage(param1, param2)}, 1000);
,而不是通過將它們在年底
的參數