Dans JavaScript, les fonctions sont des objets de première classe. Cela signifie que vous pouvez passer des fonctions autour des paramètres d'une fonction, ou les traiter comme des variables en général.
Disons que nous parlons d'une fonction hello
,
function hello() {
alert('yo');
}
Quand nous écrivons simplement
hello
nous faisons référence à la fonction qui ne l'exécute pas son contenu. Mais quand on ajoute les parens ()
après le nom de la fonction,
hello()
nous appelons effectivement la fonction qui alertera « yo » à l'écran.
La méthode bind
de jQuery accepte le type d'événement (chaîne) et une fonction en tant qu'arguments. Dans votre exemple, vous passez le type - "clic" et la fonction réelle en tant qu'argument.
Avez-vous vu Inception? Considérez cet exemple artificiel qui pourrait rendre les choses plus claires. Puisque les fonctions sont des objets de première classe dans JavaScript, nous pouvons passer et retourner une fonction depuis une fonction. Créons donc une fonction qui renvoie une fonction lorsqu'elle est invoquée, et la fonction retournée renvoie également une autre fonction lorsqu'elle est invoquée.
function reality() {
return function() {
return function() {
alert('in a Limbo');
}
};
}
Ici reality
est une fonction, reality()
est une fonction et reality()()
est une fonction aussi bien. Cependant reality()()()
n'est pas une fonction, mais simplement undefined
car nous ne retournons pas une fonction (nous ne retournons rien) de la fonction la plus interne. Donc pour l'exemple de fonction reality
, vous pourriez avoir transmis l'un des éléments suivants à la liaison de jQuery.
$('#foo').bind('click', reality);
$('#foo').bind('click', reality());
$('#foo').bind('click', reality()());
Étrangement, cela a éclairci les choses. –
Yay, je tiens maintenant le record pour utiliser "fonction" le plus de fois sur toutes les réponses SO - 27. – Anurag
+1 pour la référence de démarrage (et pour une bonne explication, bien sûr) – delnan