Cuando hablamos de 'cierre', ¿nos referimos a una sola variable o nos referimos a todas las variables 'cerradas'?

7

Tomemos el siguiente código (JavaScript) que devuelve una función que se cierra sobre las variables x y y para ilustrar:

function test() {
  var x = Math.random();
  var y = Math.random();
  var f = function() { 
    console.log(x, y); 
  };

  return f;
}
test()();

El código no tiene sentido, solo quiero cerrar más de x y y .

Las variables x y y no existen fuera de la función test , pero siguen estando disponibles en la función f .

Salvo cualesquiera optimizaciones del compilador (como en línea), ¿decimos que hay un solo cierre ( creado por f ), o decimos que hay dos cierres ( para / más x y y )?

    
pregunta Michiel van Oosterhout 21.01.2012 - 11:44

2 respuestas

12

"Un cierre" es una función que se cierra sobre una o más variables, no sobre las variables que están cerradas. Así que es un solo cierre.

    
respondido por el Mason Wheeler 21.01.2012 - 12:09
3

Un cierre es una función de primera clase que captura los enlaces léxicos de las variables definidas en su entorno. Cuando captura los enlaces, se dice que tiene "cerrado sobre" las variables.

Nota: esto significa que los cierres solo existen en tiempo de ejecución (una vez que tiene variables "cerradas sobre" ).

Entonces, en el ejemplo anterior, se crea un solo cierre cuando se ejecuta el código. Este cierre es "cerrado sobre" las variables x y y .

    
respondido por el dietbuddha 21.01.2012 - 20:43

Lea otras preguntas en las etiquetas