closures - que - scope closure
Cierre vs Función anónima(¿diferencia?) (1)
Una función anónima es simplemente una función que no tiene nombre; nada mas. Un cierre es una función que captura el estado del entorno circundante.
Una función anónima no necesariamente necesita crear un cierre, y un cierre no se crea solo para funciones anónimas.
Considere este hipotético contraejemplo. Considere un idioma Foo que no admite cierres pero admite funciones anónimas. Este lenguaje puede no compilar o arrojar un error para el siguiente código porque "saludo" no está definido en el alcance de la función interna. El hecho de que sea anónimo es irrelevante.
function outer() {
var greeting = "hello ";
(function(name) {
alert(greeting + name);
})("John Doe");
}
Consideremos un lenguaje actual que admite cierres: JavaScript. Tomando el mismo ejemplo anterior pero nombrando la función interna esta vez da:
function outer() {
var greeting = "hello ";
(function inner(name) {
alert(greeting + name);
})("John Doe");
}
Aunque la función interna ya no es anónima, aún captura el estado del entorno circundante.
Los cierres proporcionan una conveniencia muy necesaria, ya que de otro modo estaríamos pasando cada dependencia de la función como argumento.
function outer() {
var greeting = "hello ";
(function(name, greeting) {
alert(greeting + name);
})("John Doe", greeting);
}
Posibles duplicados:
¿Qué es Closures / Lambda en PHP o Javascript en términos simples?
¿Cuál es la diferencia entre un ''cierre'' y un ''lambda''?
Hola,
No he podido encontrar una definición que explique claramente las diferencias entre un cierre y una función anónima.
La mayoría de las referencias que he visto claramente especifican que son "cosas" distintas, pero parece que no entiendo por qué.
¿Podría alguien por favor simplificarlo para mí? ¿Cuáles son las diferencias específicas entre estas dos características del lenguaje? ¿Cuál es más apropiado en qué escenarios?