JavaScript清理“”中引用的(本地)对象;延迟的“;功能

JavaScript clean up of (local) objects referenced in "delayed" functions

本文关键字:对象 清理 延迟 功能 本地 引用 JavaScript      更新时间:2023-09-26

JavaScript(如果重要的话,是纯的,而不是jQuery)知道从计时器或事件调用的"延迟"函数中对对象的最后一次引用中清除/free/release吗?

取以下代码:

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以及函数本身?我猜是的。。。。

那么这两个事件示例呢?尽管我们知道它们是"一次性"事件,但我猜myDelayedInitFuncmyInitObj都不会被清理?

如果其中一些不进行清理,我是否应该让myDelayedFunc()在其末端设置myInitObj = null;,以最大限度地减少浪费?

是的,您不需要清理该引用。如果您担心您的JS代码可能存在内存泄漏,那么您可能应该阅读内存评测。