Heim > Web-Frontend > js-Tutorial > Hauptteil

So lösen Sie das Speicherleckproblem der js-Funktionsschließung_javascript-Fähigkeiten

WBOY
Freigeben: 2016-05-16 15:18:23
Original
1109 Leute haben es durchsucht

In diesem Artikel wird anhand von Beispielen erläutert, wie Sie das Problem des Speicherverlusts beim Schließen von js-Funktionen lösen können, und er wird als Referenz für alle freigegeben. Der spezifische Inhalt lautet wie folgt:

Originalcode:

function Cars(){
  this.name = "Benz";
  this.color = ["white","black"];
}
Cars.prototype.sayColor = function(){
  var outer = this;
  return function(){
    return outer.color
  };
};

var instance = new Cars();
console.log(instance.sayColor()())
Nach dem Login kopieren

Optimierter Code:

function Cars(){
  this.name = "Benz";
  this.color = ["white","black"];
}
Cars.prototype.sayColor = function(){
  var outerColor = this.color; //保存一个副本到变量中
  return function(){
    return outerColor; //应用这个副本
  };
  outColor = null; //释放内存
};

var instance = new Cars();
console.log(instance.sayColor()())

Nach dem Login kopieren

Ein etwas komplizierteres Beispiel:

function inheritPrototype(subType,superType){
  var prototype = Object(superType.prototype);
  prototype.constructor = subType;
  subType.prototype = prototype;
}

function Cars(){
  this.name = "Benz";
  this.color = ["white","black"];
}
Cars.prototype.sayColor = function(){
  var outer = this;
  return function(){
    return outer.color;
  };
};

function Car(){
  Cars.call(this);
  this.number = [321,32];
}
inheritPrototype(Car,Cars);
Car.prototype.sayNumber = function(){
  var outer = this;
  return function(){
    return function(){
      return outer.number[outer.number.length - 1];
    }
  };
};

var instance = new Car();
console.log(instance.sayNumber()()());

Nach dem Login kopieren

In diesem Beispiel wird zunächst eine Kombination aus Konstruktormuster und Prototypmuster verwendet, um das Cars-Objekt zu erstellen, und das parasitäre kombinierte Vererbungsmuster wird verwendet, um das Car-Objekt zu erstellen und die Vererbung von Eigenschaften und Methoden vom Cars-Objekt zu erhalten ;

Zweitens erstellen Sie eine Instanz des Car-Objekts mit dem Namen „instance“. Die Instanzinstanz enthält zwei Methoden: sayColor und sayNumber;

Schließlich verwendet die erstere der beiden Methoden einen Abschluss und die letztere zwei Abschlüsse und ändert dessen This, sodass auf this.color und this.number zugegriffen werden kann.

Hier liegt ein Speicherleckproblem vor. Der optimierte Code lautet wie folgt:

function inheritPrototype(subType,superType){
  var prototype = Object(superType.prototype);
  prototype.constructor = subType;
  subType.prototype = prototype;
}

function Cars(){
  this.name = "Benz";
  this.color = ["white","black"];
}
Cars.prototype.sayColor = function(){
  var outerColor = this.color; //这里
  return function(){
    return outerColor; //这里
  };
  this = null; //这里
};

function Car(){
  Cars.call(this);
  this.number = [321,32];
}
inheritPrototype(Car,Cars);
Car.prototype.sayNumber = function(){
  var outerNumber = this.number; //这里
  return function(){
    return function(){
      return outerNumber[outerNumber.length - 1]; //这里
    }
  };
  this = null; //这里
};

var instance = new Car();
console.log(instance.sayNumber()()());
Nach dem Login kopieren
Das Obige ist die Lösung, die allen zur Verfügung gestellt wird. Ich hoffe, dass sie für das Lernen aller hilfreich sein wird.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
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!