javascript - Warum führt der folgende Code zu Speicherverlusten?
phpcn_u1582
phpcn_u1582 2017-05-19 10:31:11
0
1
440
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);

Frage 1: Die Funktion deklariert den Kontext, wenn sie erstellt wird, und aktualisiert die lokalen Variablen in der Bereichskette, wenn sie ausgeführt wird. Die Bereichskette enthält lokale Variablen innerhalb der Funktion, wenn sie ausgeführt wird . Woher wissen Sie, dass die nicht verwendete Funktion definitiv auf originalThing verweist?
Frage 2: Wie lässt sich dieses Speicherleck erklären? Ich hoffe, die Experten können es genauer erklären?

phpcn_u1582
phpcn_u1582

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

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

    theThing = {
      longStr: new Array(1000000).join('*'),
      someMethod: function () {
        console.log(someMessage);
      }
    };
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!