Quelle est la différence entre la fonction d'appel en JavaScript avec ou sans parenthèses ()

Donc un exemple simple serait

function a() { alert("something"); } anything.onclick = a; // this is without parentheses anything.onclick = a(); // this is with parentheses 

Quelle est la différence entre les deux?

Et une chose de plus: si je définis la même fonction, mais cette fois, renvoyez faux, cela fonctionnera-t-il?

 function a(){ alert("something"); return false; } 

La différence est que a() appelle la fonction alors que a est la fonction.

 console.log( a() ); // false console.log( a ); // function() {...} 

Pour préciser ce qui se produit de manière pratique lorsque vous utilisez la deuxième partie de votre exemple, redéfinissons ceci comme ceci:

 a = function() { return 100; }; 

Et configurez le gestionnaire d'événements:

 anything.onclick = a(); 

f() appelle non seulement la fonction f mais renvoie sa valeur de retour. Ainsi, lorsque vous définissez une propriété de variable ou d'objet dans un appel de fonction, la valeur de retour de l'appel de fonction sera affectée. Donc, la déclaration ci-dessus est effectivement équivalente à:

 anything.onclick = 100; 

Ce qui n'a pas de sens et peut causer une erreur. Si une fonction n'a pas de valeur de retour, sa valeur de retour est implicitement undefined .

Toutefois, si vous aviez défini une variable égale à sans appeler, il serait identique à définir une expression de fonction régulière sur cette variable:

 var a = function() { ... }, b = a; // b = function() { ... } 

b exécuterait la même opération qu'un.

Donc, dans votre exemple, passez avec le premier parce que cela a du sens! Le seul cas dans lequel vous affectez la valeur de retour de l'appel de fonction à un gestionnaire d'événements est si la fonction renvoie une autre fonction. Par exemple:

 var x = function(xyz) { return function() { console.log(xyz); }; }; anything.onclick = x("Hello World"); // = function() { // console.log("Hello World"); // } 

Affecte la référence:

 anything.onclick = a; //assigns a reference 

Avec votre fonction, c'est:

 anything.onclick = function() { alert("something"); } 

Exécute la méthode et attribue le résultat renvoyé

 anything.onclick = a(); //calls the method and assigns whatever is returned. 

Avec votre fonction, c'est:

 anything.onclick = false; 

La parenthèse à la fin de la fonction est l'autorisation pour le moteur js d'exécuter la fonction. Si vous ne le fournissez pas, il ne sera pas exécuté du tout.

X = a () // si vous faites cela, vous appelez la fonction, mais si vous passez simplement "a", vous passez un pointeur vers une fonction