Referencia: uso práctico de cierres
En la práctica, los cierres pueden crear diseños elegantes, lo que permite la personalización de varios cálculos, llamadas diferidas, devoluciones de llamada, creación de alcance encapsulado, etc.
Un ejemplo del método de clasificación de matrices que acepta como argumento la función de condición de clasificación:
[1, 2, 3].sort(function (a, b) {
... // sort conditions
});
Mapeo funcional como el método de mapeo de matrices que mapea una nueva matriz por la condición del argumento funcional:
[1, 2, 3].map(function (element) {
return element * 2;
}); // [2, 4, 6]
A menudo es conveniente implementar funciones de búsqueda utilizando argumentos funcionales que definen condiciones casi ilimitadas para la búsqueda:
someCollection.find(function (element) {
return element.someProperty == 'searchCondition';
});
Además, podemos observar la aplicación de funciones como, por ejemplo, un método forEach que aplica una función a una matriz de elementos:
[1, 2, 3].forEach(function (element) {
if (element % 2 != 0) {
alert(element);
}
}); // 1, 3
Se aplica una función a los argumentos (a una lista de argumentos - en apply, y a argumentos posicionados - en llamada):
(function () {
alert([].join.call(arguments, ';')); // 1;2;3
}).apply(this, [1, 2, 3]);
Llamadas diferidas:
var a = 10;
setTimeout(function () {
alert(a); // 10, after one second
}, 1000);
Funciones de devolución de llamada:
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
};
Creación de un alcance encapsulado con el propósito de ocultar objetos auxiliares:
var foo = {};
(function (object) {
var x = 10;
object.getX = function _getX() {
return x;
};
})(foo);
alert(foo.getX());// get closured "x" – 10