Les fermetures JavaScript sont une caractéristique du développement actif et du développement passif. C'est-à-dire, d'une part, JS a des fermetures pour mieux résoudre certains problèmes. D'un autre côté, afin de résoudre certains problèmes, JS doit utiliser à peine des fermetures pour résoudre les problèmes.
Le premier n'est pas discuté ici. Si les fermetures de JS peuvent mieux résoudre le problème, bien sûr, l'utilisation de fermetures est meilleure.
Ce dont je discute, c'est ce dernier en raison des limites de JS elle-même, et le problème qui doit être résolu avec les fermetures, telles que l'exigence de "variables ne sont initialisées qu'une seule fois".
La langue conventionnelle résout ceci:
La copie de code est la suivante:
classe class {
fonction init () {
this.n = 0;
}
fonction func () {
this.n ++;
Renvoyez ce.n;
}
}
var obj = new class ();
JavaScript est généralement résolu de cette manière (en utilisant les fermetures):
La copie de code est la suivante:
var obj = {
func: (function () {
var n = 0;
return function () {
n ++;
retour n;
}
}) ()
}
Mais je recommanderais cette méthode (élimination des fermetures):
La copie de code est la suivante:
Function class () {
var self = this;
self.n = 0;
self.func = function () {
self.n ++;
return self.n;
}
}
var obj = new class ();
Parce que ce dernier est plus évolutif. Lorsque vous devez implémenter différentes opérations sur une variable, ce dernier peut simplement définir une fonction différente (c'est-à-dire une simple expansion linéaire), tandis que la première (fermeture) doit être complètement réécrite (c'est pourquoi vous entendez souvent le mot refactorisation).