Déclaration de fonction
function foo() {}
La fonction foo sera levée avant que l'ensemble du programme ne soit exécuté, elle est donc disponible dans toute la portée où la fonction foo est définie. Il n'y a aucun problème même s'il est appelé avant que la fonction ne soit définie.
foo(); // Works because foo was created before this code runs function foo() {}
Parce que j'ai l'intention d'écrire un article spécial présentant le scope, je n'entrerai pas dans les détails ici.
Expression de fonction
Pour les déclarations de fonction, le nom de la fonction est requis, mais pour les expressions de fonction, il est facultatif. Par conséquent, les expressions de fonction anonymes et les expressions de fonction nommées apparaissent. Comme suit :
Déclaration de fonction : function functionName (){ }
Déclaration de fonction : function functionName[optional](){ }
Alors je sais que s'il n'y a pas de nom de fonction, ce doit être une expression de fonction, mais comment juger le cas où il y a un nom de fonction ?
Javascript stipule que si le corps entier de la fonction fait partie d'une expression, alors c'est une expression de fonction, sinon c'est une déclaration de fonction. Voici l'expression :
var fuc = foo(){}
Donnons quelques exemples d’expressions extrêmes supplémentaires :
!function foo(){} true && function foo(){}
L'instruction ci-dessus sert uniquement à distinguer les expressions de fonction et n'est généralement pas écrite comme ceci. Utilisez ensuite un exemple comparatif pour voir l'effet :
foo1();//foo1 is not defined foo2();//works because foo2 was created before this code runs !function foo1() { alert('foo1 works'); }; function foo2() { alert('foo2 works'); };
Expression de fonction anonyme
var foo = function() {};
L'exemple ci-dessus attribue une fonction anonyme à la variable foo.
foo; // 'undefined' foo(); // this raises a TypeError var foo = function() {};
Puisque var est une déclaration, la variable foo est hissée ici, donc lorsque le programme est exécuté, la variable foo est appelable.
Mais comme l'instruction d'affectation ne prend effet qu'au moment de l'exécution, la valeur de la variable foo n'est pas définie.
Expression de fonction nommée
Une autre chose dont il faut parler est l'attribution de fonctions nommées.
var foo = function bar() { bar(); // Works }; bar(); // ReferenceError
Ici, la fonction nommée bar est affectée à la variable foo, elle n'est donc pas visible en dehors de la déclaration de la fonction, mais peut toujours être appelée à l'intérieur de la fonction bar. Cela est dû à la façon dont Javascript gère les fonctions nommées. Le nom d'une fonction est toujours valide dans la portée à l'intérieur de la fonction.