Référence: Utilisation pratique des fermetures
Dans la pratique, les fermetures peuvent créer des conceptions élégantes, permettant la personnalisation de divers calculs, appels différés, rappels, création d'une portée encapsulée, etc.
Un exemple de la méthode de tri des tableaux qui accepte comme argument la fonction condition de tri:
[1, 2, 3].sort(function (a, b) {
... // sort conditions
});
Mappage des fonctionnelles comme méthode de mappage des tableaux qui mappe un nouveau tableau par la condition de l'argument fonctionnel:
[1, 2, 3].map(function (element) {
return element * 2;
}); // [2, 4, 6]
Il est souvent pratique d'implémenter des fonctions de recherche en utilisant des arguments fonctionnels définissant des conditions de recherche presque illimitées:
someCollection.find(function (element) {
return element.someProperty == 'searchCondition';
});
Nous pouvons également noter l'application de fonctionnelles comme, par exemple, une méthode forEach qui applique une fonction à un tableau d'éléments:
[1, 2, 3].forEach(function (element) {
if (element % 2 != 0) {
alert(element);
}
}); // 1, 3
Une fonction est appliquée aux arguments (à une liste d'arguments - en application et aux arguments positionnés - en appel):
(function () {
alert([].join.call(arguments, ';')); // 1;2;3
}).apply(this, [1, 2, 3]);
Appels différés:
var a = 10;
setTimeout(function () {
alert(a); // 10, after one second
}, 1000);
Fonctions de rappel:
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
};
Création d'une portée encapsulée dans le but de masquer des objets auxiliaires:
var foo = {};
(function (object) {
var x = 10;
object.getX = function _getX() {
return x;
};
})(foo);
alert(foo.getX());// get closured "x" – 10