为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2018-11-14 13:13:35
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:这段内存泄露怎么解释,希望大牛们能解释地详细一点?
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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

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

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


查看完整回答
反对 回复 2018-12-10
  • 1 回答
  • 0 关注
  • 565 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信