2012-06-16 33 views
0

在它說mozilla docs重複使用時,nsiTimer是否會導致溢出或內存問題?

initWithCallback():初始化定時器定毫秒的間隔之後觸發。這個版本需要一個函數來調用,一個閉包傳遞給那個函數。

在此代碼示例:

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

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

實際上有多少包含在傳遞給此功能關閉。閉包是否保留整個堆棧的副本?該代碼是否有堆棧溢出或永久增加內存使用風險?

+0

在那裏有一個錯位的'}'嗎?我認爲最後一個'}'應該放在最後''''裏面,你覺得怎麼樣? –

回答

0

理論上,閉包保留了閉包範圍內的所有東西(所以在這種情況下,setupTimer中的局部變量加上setupTimer本身關閉的任何變量)。請注意,這與調用堆棧不同:JS中的閉包範圍是詞法的,而不是動態的,因此,如何到達函數並不重要,而只是函數的來源如何。

在實踐中,JS引擎大量優化閉包以加速對閉包中裸字的訪問,因此閉包實際上保持活動的集合可能比我上面描述的理論集小。但我不會依賴於此。