Comment déclarer les fonctions
Il existe généralement deux façons de déclarer une fonction:
foo () {}; // Déclaration de fonction var foo = function () {}; // Fonction ExpressionLa différence
1. L'expression de la fonction peut être exécutée directement avec des supports après
2. La déclaration de la fonction sera pré-payée à l'avance
Préanalyse
Regardons d'abord un exemple:
foo (); // Déclaration de fonction foo_later (); // FOO_LATER n'est pas une fonction fonction FOO () {Console.log ('Function Declaration'); } var foo_later = function () {console.log ('function expression'); }Comme vous pouvez le voir, la déclaration de fonction FOO est préparée et peut être exécutée avant son propre code; L'expression de fonction foo_later ne peut pas. Pour résoudre ce problème, nous devons d'abord comprendre le mécanisme de travail de l'analyseur JavaScript.
Boost variable (palan)
L'analyseur JavaScript hissera les variables et les déclarations de fonctions dans sa propre portée. C'est-à-dire que l'exemple ci-dessus est en fait compris et analysé par l'analyseur dans la forme suivante:
fonction foo () {console.log ('la déclaration de fonction'); } // Toutes les déclarations de fonction sont avancées var foo_later; // Les expressions de fonction (déclarations variables) ne font avancer que les variables, et l'opération d'attribution n'est pas avancée foo (); foo_later (); foo_later = function () {console.log ('function expression'); }Cela peut également expliquer pourquoi appeler une fonction avant que l'expression de la fonction renvoie une erreur, car elle n'a pas encore été affectée, c'est juste une variable non définie et bien sûr ne peut pas être exécutée.
De même, nous pouvons également essayer de deviner la sortie du code suivant:
Console.log (DeclatedLater); var DeclatedLater = "Maintenant, il est défini!"; Console.log (DeclatedLater);
Ce code peut être analysé dans le formulaire suivant:
var déclarélater; Console.log (DeclatedLater); // undefineddeclarelater = "Maintenant, il est défini!"; console.log (déclaré); // Maintenant, c'est défini!
La déclaration de variable est mentionnée en premier (donc aucune erreur dans la variable n'existe sera signalée), mais l'affectation n'est pas avancée, donc le premier résultat de sortie n'est pas défini.
Il convient de noter que
Étant donné que les déclarations de fonction sont préparées, n'utilisez pas cette méthode pour déclarer différentes fonctions. Essayez de deviner la sortie de l'exemple suivant:
if (true) {fonction aaa () {alert ('1'); }} else {fonction aaa () {alert ('2'); }} aaa ();Contrairement à ce à quoi nous nous attendions, le code apparaît avec "2". En effet, les deux déclarations de fonction sont pré-parées avant que l'instruction IF ne soit exécutée, donc l'instruction IF est inutile du tout. Lorsque AAA () est appelé, la fonction suivante est directement exécutée.
Résumer
Grâce à l'explication ci-dessus, nous pouvons le résumer comme suit:
• La déclaration de la variable est avancée vers le haut de la portée, et la cession reste en place
• Déclaration de fonction de l'ensemble "avant"
• Lorsqu'une fonction est attribuée à une variable en tant que valeur, seule la variable est "avancée" et la fonction n'est pas "avancée".
Découvrez-le davantage en pratiquant les exemples ci-dessus. En outre, en tant que meilleure pratique: les déclarations variables doivent être placées en haut de la portée / fonction (JavaScript a uniquement la portée de la fonction!).
L'article ci-dessus comprend de manière globale les déclarations de fonction, les expressions de fonction et l'amélioration des variables sont tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.