javascript setInterval的内存泄漏

zap*_*ing 3 javascript performance timeout

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

setInterval(animateImage, 1000);

or 

setInterval('animateImage()', 1000);
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*ing 6

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

这可能会导致问题

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

例如,以下将工作:

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

foo();
Run Code Online (Sandbox Code Playgroud)

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

显然,传递对函数的直接引用将比eval使用字符串"更快" .