La fonction javascript se comporte différemment

J'ai une function en javascript:

 var a=function greet(){ console.log("Hello"); } var b=a; b(); 

En créant un nouveau var b et assignant la fonction a à b logs hello Cependant, le code:

Enregistre l'erreur. Pourquoi? Aussi

 (function greet(){ console.log("Hello"); })() 

et

 var a=function greet(){ console.log("Hello"); }() 

Les journaux "Bonjour". Expliquez bien la logique derrière cela.

  function greet(){ console.log("Hello"); }() 

Il y a eu une erreur parce que vous avez invoqué la fonction immédiatement mais pas le corps de fonction enveloppé avec '()'. Donc, invoquez la fonction immédiatement, vous devez suivre le modèle suivant:

 (fucntion(){ /* code*/ })() 

Mais votre premier exemple fonctionne en raison de votre stockage de la fonction dans une variable et l'appelant plus tard comme style de rappel.

Comme précédemment commenté, lorsque vous définissez une expression de fonction, la fonction sur RHS est traitée comme une fonction anonyme. La référence de cette fonction ne sera pas enregistrée.

Échantillon:

 var a = function test(){ console.log("test"); } test(); 

Dans votre premier exemple, vous attribuez une fonction à la variable a, puis faites une référence à la variable a. Ensuite, vous appelez b qui exécute la fonction a.

Dans votre deuxième exemple, vous créez une fonction, mais vous ne l'affectez pas ou ne l'appellez pas. Si vous appelez simplement la fonction dans votre deuxième exemple, cela fonctionnera comme prévu.

 function greet(){ console.log("Hello"); } greet();