JavaScript -Schließungen sind ein Merkmal der aktiven Entwicklung und passiven Entwicklung. Das heißt, einerseits hat JS Schließungen, um einige Probleme besser zu lösen. Andererseits muss JS Schließungen verwenden, um kaum Probleme zu lösen, um bestimmte Probleme zu lösen.
Ersteres wird hier nicht besprochen. Wenn JS -Schließungen das Problem besser lösen können, ist es natürlich besser, Schließungen zu verwenden.
Was ich diskutiere, ist das letztere aufgrund der Einschränkungen von JS selbst und des Problems, das mit Schließungen gelöst werden muss, z. B. die Anforderung von "Variablen werden nur einmal initialisiert".
Die konventionelle Sprache löst dies:
Die Codekopie lautet wie folgt:
Klasse Klasse {
Funktion init () {
this.n = 0;
}
Funktion func () {
this.n ++;
kehre dies zurück.n;
}
}
var obj = new class ();
JavaScript wird im Allgemeinen auf diese Weise gelöst (unter Verwendung von Schließungen):
Die Codekopie lautet wie folgt:
var obj = {
func: (function () {
var n = 0;
return function () {
n ++;
return n;
}
}) ())
}
Aber ich würde diese Methode empfehlen (Abschluss der Schließungen):
Die Codekopie lautet wie folgt:
Funktion class () {
var self = this;
self.n = 0;
self.func = function () {
self.n ++;
Return Self.N;
}
}
var obj = new class ();
Weil letzteres skalierbarer ist. Wenn Sie unterschiedliche Operationen in einer Variablen implementieren müssen, kann letzteres einfach eine andere Funktion definieren (dh eine einfache lineare Expansion), während das erstere (Verschluss) vollständig umschreiben muss (deshalb hören Sie häufig das Wort refactoring).