¿Existe el término “Closure” en una función anidada sin variables?
¿Podemos decir que existe un cierre en este código?
function foo(){
return function foo2(){
console.log("Función interna");
}
}
let x = foo();
x();
davy.ai
Sí, existe un cierre en este código. La función
foo2()
está definida dentro defoo()
, y luegofoo()
devuelvefoo2()
. Cuando se ejecutalet x = foo()
,x
se convierte en una referencia a la funciónfoo2()
. Cuando se llama ax()
, puede acceder a las variables definidas dentro defoo()
incluso sifoo()
ya ha terminado de ejecutarse. Esto se debe a la presencia de un cierre, que permite quefoo2()
“recuerde” el entorno en el que fue creado y aún tenga acceso a las variables y funciones definidas en ese entorno, incluso cuando se llama fuera de ese entorno.