搜索

首页  >  问答  >  正文

javascript - 为什么下面这段代码会出现内存泄露?

var theThing = null;
var replaceThing = function () {
  var originalThing = theThing;
  var unused = function () {
    if (originalThing)
      console.log("hi");
  };

  theThing = {
    longStr: new Array(1000000).join('*'),
    someMethod: function () {
      console.log(someMessage);
    }
  };
};

setInterval(replaceThing, 1000);

问题1:函数在创建的时候声名上下文,在执行的时候将局部变量更新置作用域链中,作用域链在执行的时候包含函数内部的局部变量,比较疑惑的是unused函数未被执行,怎么知道unused函数一定会引用originalThing的?
问题2:这段内存泄露怎么解释,希望大牛们能解释地详细一点?

phpcn_u1582phpcn_u15822787 天前483

全部回复(1)我来回复

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:33:11

    • 问题1: function(replaceThing)内的变量在离开了它的作用域后,如果这个function(replaceThing)在使用一次后,直到程序执行完也没有再引用,过一段时间就会被回收。

    • 问题2: 你看看thething赋值动作,其中的创建数组动作可是一直在做,一次1000000做join操作,不断执行,内存回收的速度跟不上它增长的速度,很快导致内存泄露。

      theThing = {
        longStr: new Array(1000000).join('*'),
        someMethod: function () {
          console.log(someMessage);
        }
      };

    回复
    0
  • 取消回复