Javascript 重复使用nsiTimer会导致溢出或内存问题吗?

Javascript 重复使用nsiTimer会导致溢出或内存问题吗?,javascript,firefox,timer,Javascript,Firefox,Timer,在报告中说: initWithCallback():初始化计时器以在给定毫秒间隔后触发。这个版本需要调用一个函数,并向该函数传递一个闭包 在此代码示例中: setupTimer: function() { var waitPeriod = getNewWaitPeriod(); myTimer.initWithCallback({ notify: function(t) { foo(); setupTimer()

在报告中说:

initWithCallback():初始化计时器以在给定毫秒间隔后触发。这个版本需要调用一个函数,并向该函数传递一个闭包

在此代码示例中:

setupTimer: function() {
    var waitPeriod = getNewWaitPeriod();

    myTimer.initWithCallback({ 
        notify: function(t) {
            foo();
            setupTimer();
        }
    },
    waitPeriod,
    Components.interfaces.nsITimer.TYPE_ONE_SHOT);
}

传递给函数的闭包中实际包含了多少。闭包是否保留整个堆栈的副本?此代码示例是否存在堆栈溢出或永久增加内存使用的风险?

理论上,闭包保留闭包范围内的所有内容(因此在本例中,setupTimer中的局部变量加上setupTimer本身关闭的任何变量)。请注意,这与callstack不同:JS中的闭包作用域是词法的,而不是动态的,因此无论您如何访问函数,都只是函数的源代码是什么样子


在实践中,JS引擎对闭包进行了大量优化,以加快对闭包中裸字的访问,因此闭包实际上保持活动的内容集可能比我上面描述的理论集要小。但是我不相信这一点。

在那里的某个地方有一个放错地方的
}
?我认为最后一个
}
应该在最后一个
里面,你认为呢?