Riferimento: utilizzo pratico delle chiusure
In pratica le chiusure possono creare disegni eleganti, che consentono la personalizzazione di vari calcoli, chiamate differite, richiamate, creazione di ambito incapsulato ecc.
Un esempio del metodo di ordinamento delle matrici che accetta come argomento la funzione di ordinamento-condizione:
[1, 2, 3].sort(function (a, b) {
... // sort conditions
});
Mappatura dei funzionali come metodo di mappatura degli array che mappa un nuovo array in base alla condizione dell'argomento funzionale:
[1, 2, 3].map(function (element) {
return element * 2;
}); // [2, 4, 6]
Spesso è conveniente implementare le funzioni di ricerca utilizzando argomenti funzionali che definiscono condizioni quasi illimitate per la ricerca:
someCollection.find(function (element) {
return element.someProperty == 'searchCondition';
});
Inoltre, possiamo notare l'applicazione di funzionali come, ad esempio, un metodo forEach che applica una funzione a una matrice di elementi:
[1, 2, 3].forEach(function (element) {
if (element % 2 != 0) {
alert(element);
}
}); // 1, 3
Una funzione viene applicata agli argomenti (a un elenco di argomenti - in applica e agli argomenti posizionati - in chiamata):
(function () {
alert([].join.call(arguments, ';')); // 1;2;3
}).apply(this, [1, 2, 3]);
Chiamate differite:
var a = 10;
setTimeout(function () {
alert(a); // 10, after one second
}, 1000);
Funzioni di richiamata:
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
};
Creazione di un ambito incapsulato allo scopo di nascondere oggetti ausiliari:
var foo = {};
(function (object) {
var x = 10;
object.getX = function _getX() {
return x;
};
})(foo);
alert(foo.getX());// get closured "x" – 10