cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Mengapa kod berikut membocorkan memori?

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_u1582phpcn_u15822751 hari yang lalu455

membalas semua(1)saya akan balas

  • 过去多啦不再A梦

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

    • 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);
        }
      };

    balas
    0
  • Batalbalas