Maison > interface Web > js tutoriel > le corps du texte

Comment résoudre le problème de fuite de mémoire des compétences de fermeture_javascript de la fonction js

WBOY
Libérer: 2016-05-16 15:18:23
original
1156 Les gens l'ont consulté

Cet article explique comment résoudre le problème de fuite de mémoire de fermeture de fonction js à travers des exemples, du superficiel au profond, et le partage avec tout le monde pour votre référence. Le contenu spécifique est le suivant

.

Code d'origine :

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()())
Copier après la connexion

Code optimisé :

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()())

Copier après la connexion

Un exemple un peu plus compliqué :

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()()());

Copier après la connexion

Tout d'abord, cet exemple utilise une combinaison du modèle constructeur et du modèle prototype pour créer l'objet Cars, et utilise le modèle d'héritage combiné parasite pour créer l'objet Car et obtenir l'héritage des propriétés et des méthodes de l'objet Cars. ;

Deuxièmement, créez une instance de l'objet Car nommée instance ; l'instance d'instance contient deux méthodes : sayColor et sayNumber ;

Enfin, des deux méthodes, la première utilise une fermeture, et la seconde utilise deux fermetures, et modifie son this pour pouvoir accéder à this.color et this.number.

Il y a un problème de fuite de mémoire ici. Le code optimisé est le suivant :

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()()());
Copier après la connexion
Ce qui précède est la solution partagée avec tout le monde. J'espère qu'elle sera utile à l'étude de chacun.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal