En las funciones de JavaScript se encuentran objetos de primera clase. Eso significa que puede pasar funciones como parámetros a una función, o tratarlas como variables en general.
Digamos que estamos hablando de una función hello
,
function hello() {
alert('yo');
}
Cuando simplemente escribimos
hello
nos estamos refiriendo a la función que no ejecute su contenido. Pero cuando añadimos los parens ()
después de que el nombre de la función,
hello()
continuación, en realidad estamos llamando a la función que alertará "yo" en la pantalla.
El método bind
en jQuery acepta el tipo de evento (cadena) y una función como sus argumentos. En su ejemplo, está pasando el tipo - "clic" y la función real como argumento.
¿Has visto Inception? Considere este ejemplo artificial que podría aclarar las cosas. Como las funciones son objetos de primera clase en JavaScript, podemos pasar y devolver una función desde dentro de una función. Entonces creamos una función que devuelve una función cuando se invoca, y la función devuelta también devuelve otra función cuando se invoca.
function reality() {
return function() {
return function() {
alert('in a Limbo');
}
};
}
Aquí reality
es una función, reality()
es una función, y reality()()
es una función también. Sin embargo, reality()()()
no es una función, sino simplemente undefined
ya que no estamos devolviendo una función (no estamos devolviendo nada) desde la función más interna.
Por lo tanto, para el ejemplo de función reality
, podría haber pasado cualquiera de los siguientes al enlace de jQuery.
$('#foo').bind('click', reality);
$('#foo').bind('click', reality());
$('#foo').bind('click', reality()());
Extrañamente, eso no solucionó nada. –
Yay, ahora tengo el récord de usar "función" el mayor número de veces de todas las respuestas SO - 27. – Anurag
+1 para referencia de inicio (y para una buena explicación, por supuesto) – delnan