Déclaration de fonction
fonction foo () {}La fonction FOO sera hissée avant l'exécution de l'ensemble du programme, il est donc disponible dans toute la portée (portée) qui définit la fonction FOO. Même l'appeler avant que la définition de la fonction soit OK.
foo (); // fonctionne parce que FOO a été créé avant que ce code fonctionne FOO () {}Parce que je prévois d'écrire un article en introduisant spécifiquement la portée, je ne l'expliquerai pas en détail ici.
Expressions de fonction
Pour les déclarations de fonction, le nom de la fonction est nécessaire, 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: fonction functionname () {}
Déclaration de fonction: fonction fonctionname [facultatif] () {}
Ensuite, je sais que s'il n'y a pas de nom de fonction, ce doit être une expression de fonction, mais comment devrions-nous juger s'il y a un nom de fonction?
JavaScript spécifie que si le corps de fonction entier fait partie d'une expression, c'est une expression de fonction, sinon c'est une déclaration de fonction. Ce qui suit est l'expression:
var fuc = foo () {}Donnons quelques exemples d'expression plus extrêmes:
! function foo () {} true && function foo () {}Les déclarations ci-dessus sont juste pour distinguer les expressions de fonction, et elles ne sont généralement pas écrites comme celle-ci. Utilisez ensuite un exemple de comparaison pour voir l'effet:
foo1 (); // foo1 n'est pas défini foo2 (); // fonctionne parce que FOO2 a été créé avant que ce code s'exécute! Fonction foo1 () {alert ('foo1 works');}; fonction foo2 () {alert ('foo2 works');};Expressions de fonction anonymes
var foo = function () {};L'exemple ci-dessus attribue une fonction anonyme au FOO variable.
foo; // 'undefined'foo (); // Cela soulève un typeErrorVar foo = function () {};Étant donné que VAR est une déclaration, le FOO variable est hissé (promu) ici, donc lorsque le programme est exécuté, la variable FOO est appelable.
Cependant, comme l'instruction Affectation ne prend effet qu'au moment de l'exécution, la valeur de la variable FOO n'est pas définie.
Expressions de fonction nommées
Une autre chose à laquelle parler est l'attribution des fonctions nommées.
var foo = fonction bar () {bar (); // fonctionne}; bar (); // référenceIci, la barre de fonction nommée est attribuée au FOO variable, il est donc invisible en dehors de la déclaration de fonction, mais il peut toujours être appelé à l'intérieur de la fonction de la barre. En effet, le mécanisme de JavaScript pour les fonctions de dénomination, le nom de la fonction est toujours valide dans la portée à l'intérieur de la fonction.