Es un closure y anonymous function - conceptos clave en Javascript. Javascript no tiene propiedades o campos privados "verdaderos", pero con un cierre puede crear esencialmente el equivalente. Son un medio muy importante de organizar JS.
Un punto crítico en esta muestra es la ();
al final del código - la adición de estos paréntesis indica Javascript para ejecutar el código inmediatamente - inicializar efectivamente todo lo que se encuentra dentro.
http://www.jibbering.com/faq/notes/closures/
para ayudar a aclarar (no soy un experto JS) - esta construcción, aunque no sea un cierre puro, que se ve con frecuencia en combinación con cierres. Por ejemplo, el siguiente fragmento de código (copiada de mi enlace anterior) utiliza esta sintaxis para definir un método interno, oculto:
function callLater(paramA, paramB, paramC){
/* Return a reference to an anonymous inner function created
with a function expression:-
*/
return (function(){
/* This inner function is to be executed with - setTimeout
- and when it is executed it can read, and act upon, the
parameters passed to the outer function:-
*/
paramA[paramB] = paramC;
});
}
...
/* Call the function that will return a reference to the inner function
object created in its execution context. Passing the parameters that
the inner function will use when it is eventually executed as
arguments to the outer function. The returned reference to the inner
function object is assigned to a local variable:-
*/
var functRef = callLater(elStyle, "display", "none");
/* Call the setTimeout function, passing the reference to the inner
function assigned to the - functRef - variable as the first argument:-
*/
hideMenu=setTimeout(functRef, 500);
Aunque: este ejemplo no ejecutar inmediatamente (que carece de la ();
) después la definición de la función interna. Entonces, en este caso, la función adjunta se evalúa en un momento posterior - esos ()
hacen una gran diferencia en un lenguaje funcional.
Un cierre, como dijiste, es un concepto clave en JavaScript. Pero es esencialmente para mantener o evitar referencias a variables que pertenecen al contexto de ejecución de la función que accede a ellas. Lo que sucede aquí es que no hay variables, y que no es el objetivo de la pregunta después de todo. No estoy haciendo accesible ninguna variable fuera de su contexto original. Entonces ... ¿Dónde hay cierres aquí? Vi que cabía un voto negativo ("La respuesta no es útil"). Si quieres, puedo sacarlo, pero tu respuesta tiene poco en común con el resto. – DanC
"no hay variables". - no hay nada dentro del ejemplo, presumo que el caso que usted estaba examinando probablemente contenía miembros tales como variables y otras funciones, lo que hace que esto actúe como un cierre. Es algo que rara vez he visto para scripting/procedural Javascript simple – STW
Lo siento STW, no quise ser grosero, pero, ¿viste las otras respuestas? Puedes discutir durante todo el día, pero en este punto parece claro lo que he preguntado (teniendo en cuenta todas las otras respuestas), y tu respuesta simplemente no encajaba. De hecho, este fue un duplicado exacto de otra pregunta que no pude encontrar. Gracias de todos modos por responder, pero su respuesta puede ser más adecuada para otra pregunta, tal vez sobre cierres. Además, su respuesta parece haber cambiado mucho desde la original. – DanC