Maison >interface Web >js tutoriel >Analyse des occasions et des avantages et inconvénients des compétences js close_javascript

Analyse des occasions et des avantages et inconvénients des compétences js close_javascript

WBOY
WBOYoriginal
2016-05-16 15:53:391413parcourir

D'abord le code :

//函数a
function a()
{
var i=0;
//函数b
function b()
{
alert(++i);
}
return b;
}
//函数c
var c = a();
c();

Fonctionnalités du code :

1. La fonction b est imbriquée dans la fonction a
2. La fonction a renvoie la fonction b.
Lorsque la fonction interne b de la fonction a dans le code est référencée par une variable c extérieure à la fonction a, cela s'appelle créer une fermeture. Parfois, la fonction b peut également être renvoyée par une fonction anonyme, c'est-à-dire return function(){};

Avantages : 1. Protéger la sécurité des variables au sein de la fonction et améliorer l'encapsulation 2. Conserver une variable en mémoire (en utiliser trop deviendra un inconvénient et occupera de la mémoire)
La raison pour laquelle les fermetures occupent des ressources est que lorsque la fonction a se termine, la variable i ne sera pas détruite car la fonction a se termine, car l'exécution de b dépend des variables de a.
Ne convient pas au scénario : la fonction qui renvoie la fermeture est une très grande fonction

Le cadre typique de fermeture devrait être jquery.

Les fermetures sont une fonctionnalité majeure du langage JavaScript. Les principales utilisations des fermetures sont la conception de méthodes et de variables privées.
Ceci est plus évident lors de la création d'un framework. Certaines méthodes et attributs ne sont utilisés que dans le processus logique d'opération. Vous ne souhaitez pas autoriser la modification externe de ces attributs, vous pouvez donc concevoir une fermeture pour fournir uniquement un accès aux méthodes.

L'inconvénient des fermetures est qu'elles résident en mémoire, ce qui augmentera l'utilisation de la mémoire. Une mauvaise utilisation peut facilement provoquer des fuites de mémoire.

Pour résumer :

Avantages :

1. Continuité logique. Lorsque la fermeture est utilisée comme paramètre d'un autre appel de fonction, elle vous empêche de rompre avec la logique actuelle et d'écrire une logique supplémentaire séparément.
2. Faciliter l'appel des variables locales du contexte.
3. Renforcer l'encapsulation. Une extension du point 2 peut protéger les variables.

Inconvénients :

Les fermetures ont un problème très grave, qui est le problème du gaspillage de mémoire. Ce gaspillage de mémoire n'est pas seulement dû au fait qu'il réside en mémoire, mais plus important encore, une mauvaise utilisation des fermetures entraînera la génération de mémoire invalide. :

var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}

alert(array[0] == array[1]);

Grâce au test ci-dessus, nous verrons que les adresses d'une même fermeture logique générées par l'exécution de abc() dix mille fois ne sont pas les mêmes, ce qui signifie qu'elle produit un tas d'objets Function identiques, donc il y a L'avantage est que vous pouvez utiliser le mode usine pour générer des fonctions à utiliser. Cependant, si vous utilisez accidentellement des fermetures comme logique normale, des déchets de mémoire seront inévitablement provoqués. Cela peut être plus facile à comprendre si vous changez la syntaxe :

var foo = new Function();

Donc, en ce qui concerne les fermetures, en ce qui concerne mes propres habitudes, je ne les utilise pas si je peux. S'ils doivent être utilisés, alors trouvez un moyen de garder le nombre d'objets de fermeture petit ou même unique.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Déclaration:
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