javascript - Mengapa kod berikut membocorkan memori?
phpcn_u1582
phpcn_u1582 2017-05-19 10:31:11
0
1
379
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);

Soalan 1: Fungsi mengisytiharkan konteks apabila ia dibuat, dan mengemas kini pembolehubah tempatan ke dalam rantai skop apabila dilaksanakan . Bagaimana anda tahu bahawa fungsi yang tidak digunakan pasti akan merujuk kepada originalThing?
Soalan 2: Bagaimana untuk menerangkan kebocoran memori ini? Saya harap pakar dapat menjelaskannya dengan lebih terperinci?

phpcn_u1582
phpcn_u1582

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

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

    theThing = {
      longStr: new Array(1000000).join('*'),
      someMethod: function () {
        console.log(someMessage);
      }
    };
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!