JavaScript(純粹的,不是jQuery,如果有要求的話)知道清除/釋放/從最後一次引用「延遲」函數中的對象從計時器或事件中調用?在「延遲」函數中引用的(本地)對象的JavaScript清理
看看下面的代碼:
function myInitFunc()
{
var myInitObj = new Object();
myInitObj.properties = lotsOfStuff;
var myDelayedInitFunc = function()
{
doSomethingWith(myInitObj);
// I shall not be accessing myInitObj again now.
};
// Let's say, *one* of the following:
setTimeout(myDelayedInitFunc, 1000);
window.addEventListener('load', myDelayedInitFunc);
document.addEventListener('DOMContentLoaded', myDelayedInitFunc);
}
注意myDelayedInitFunc()
故意訪問變量myInitObj
,這是本地myInitFunc()
。
例如,在http://javascript.info/tutorial/memory-leaks中聲明「在setTimeout/setInterval中使用的函數也在內部被引用並被追蹤直到完成,然後被清理」。這個「清理」是否理解它可以擺脫myInitObj
以及函數本身?我有點猜測它......
這兩個事件的例子呢?即使我們知道它們是「一次性」事件,但我猜測myDelayedInitFunc
和myInitObj
都不會被清理乾淨?
如果它是其中的一些做不清理,我應該讓myDelayedFunc()
設置myInitObj = null;
在其結束,從而最大限度地減少浪費的情況?
我很感謝您的快速響應。 「不需要清理」真的適用於那些*事件*以及'setTimeout'嗎?我可以理解後者,但是要清理這些事件意味着JavaScript理解這兩個事件名稱只會被稱爲一次?如果可能的話,我喜歡理解*理論*。 – JonBrave
理論根據您查看哪個瀏覽器而有所不同,因爲每個瀏覽器都有不同的垃圾收集器實現。如果你想知道更多關於垃圾收集的內容,請閱讀這篇文章(http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection)... –
有趣的閱讀本身,儘管它確實不要對我所問的情況有所瞭解。不過,我會接受你的斷言,這不是我應該擔心的,並將你的答案標記爲解決方案。 – JonBrave