Referenz: Praktische Verwendung von Verschlüssen
In der Praxis lassen sich mit Closures elegante Entwürfe erstellen, die die Anpassung verschiedener Berechnungen, zeitversetzte Aufrufe, Rückrufe, die Erstellung gekapselter Bereiche usw. ermöglichen.
Ein Beispiel ist die Sortiermethode von Arrays, die die Sortierbedingungsfunktion als Argument akzeptiert:
[1, 2, 3].sort(function (a, b) {
... // Sort conditions
});
Mapping-Funktionale wie die Map-Methode von Arrays, die ein neues Array durch die Bedingung des funktionalen Arguments abbildet:
[1, 2, 3].map(function (element) {
return element * 2;
}); // [2, 4, 6]
Oft ist es zweckmäßig, Suchfunktionen mit funktionalen Argumenten zu implementieren, die nahezu unbegrenzte Bedingungen für die Suche festlegen:
someCollection.find(function (element) {
return element.someProperty == 'searchCondition';
});
Außerdem können wir die Anwendung von Funktionalitäten beachten, z. B. eine forEach-Methode, die eine Funktion auf ein Array von Elementen anwendet:
[1, 2, 3].forEach(function (element) {
if (element % 2 != 0) {
alert(element);
}
}); // 1, 3
Eine Funktion wird auf Argumente angewendet (auf eine Liste von Argumenten - in apply, und auf positionierte Argumente - in call):
(function () {
alert([].join.call(arguments, ';')); // 1;2;3
}).apply(this, [1, 2, 3]);
Aufgeschobene Anrufe:
var a = 10;
setTimeout(function () {
alert(a); // 10, after one second
}, 1000);
Rückruf-Funktionen:
var x = 10;
// Only for example
xmlHttpRequestObject.onreadystatechange = function () {
// Callback, which will be called deferral ,
// when data will be ready;
// variable "x" here is available,
// regardless that context in which,
// it was created already finished
alert(x); // 10
};
Erstellung eines gekapselten Bereichs, um Hilfsobjekte zu verstecken:
var foo = {};
(function (object) {
var x = 10;
object.getX = function _getX() {
return x;
};
})(foo);
alert(foo.getX()); // Get closured "x" – 10