javascript - Mengapa kod berikut membocorkan memori?
phpcn_u1582
phpcn_u1582 2017-05-19 10:31:11
0
1
451
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梦
  • Soalan 1: Selepas pembolehubah dalam fungsi (replaceThing) meninggalkan skopnya, jika fungsi (replaceThing) digunakan sekali dan tidak dirujuk semula sehingga program dilaksanakan, selepas beberapa ketika akan dikitar semula .

  • Soalan 2: Jika anda melihat tindakan penugasan perkara, tindakan mencipta tatasusunan sedang dilakukan sepanjang masa 1,000,000 operasi gabungan dilakukan pada satu-satu masa, dan ia akan dilaksanakan secara berterusan mengikuti kadar pertumbuhannya, yang tidak lama lagi akan membawa kepada kebocoran memori.

    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