Il existe deux méthodes principales pour créer des fonctions dans JavaScript: les déclarations de fonction et les expressions de fonction. Les deux méthodes ont des scénarios applicables différents. Cette note se concentre principalement sur plusieurs caractéristiques majeures des expressions de fonctions et leurs scénarios d'utilisation, qui sont décrits ci-dessous.
Caractéristiques principales
• Nom de la fonction facultatif
Le nom de la fonction est une partie nécessaire de la déclaration de fonction. Ce nom de fonction équivaut à une variable. La fonction nouvellement définie sera copiée sur cette variable. L'appel à la fonction doit être effectué via cette variable à l'avenir. Pour les expressions de fonction, le nom de la fonction est facultatif, par exemple:
var sub = fonction (a1, a2) {return a1-a2; }Dans cet exemple, l'expression de la fonction n'a pas de nom et appartient à l'expression de la fonction anonyme. Jetons un coup d'œil à l'exemple suivant:
var sub = fonction f (a1, a2) {return a1-a2; } console.log (f (5,3)); // Méthode d'appel incorrect Console.log (sub (5,3)); // Méthode d'appel correctDans cet exemple, le nom de l'expression de la fonction est f. Ce nom F devient en fait une variable locale à l'intérieur de la fonction et fait référence à l'objet de fonction lui-même. Il est très utile lorsque la fonction récursive et sera discutée en détail plus tard.
• Créer pendant la phase d'exécution (différente des déclarations de fonction)
Cette fonctionnalité est que l'expression de la fonction est évidemment différente de la déclaration de fonction.
L'interprète ne traite pas les deux méthodes également lors de l'analyse du code JavaScript. L'interprète lira d'abord la déclaration de fonction et la mettra à disposition avant d'exécuter un code; Alors que pour les expressions de fonction, vous devez attendre que l'interprète s'exécute à la ligne de code où il est situé avant qu'il ne soit réellement analysé et exécuté. Par exemple:
console.log (Add (1,2)); // "3" console.log (sub (5,3)); // "identifiant inattendu", fonction d'erreur Add (a1, a2) {return a1 + a2; } var sub = fonction (a1, a2) {return a1-a2; }La première instruction peut être exécutée normalement. Lors de l'évaluation du code, le moteur JavaScript déclare les fonctions sur la première passe et les place en haut de l'arborescence source par le biais d'un processus appelé la promotion de la déclaration de fonction. C'est-à-dire que pendant l'étape de création de l'environnement d'exécution (la fonction est appelée mais n'a pas commencé l'exécution), la déclaration de la fonction sera "l'hébergement". Ainsi, même si le code qui déclare une fonction est derrière le code qui l'appelle, le moteur JavaScript soulèvera la déclaration de fonction vers le haut. Cependant, si la déclaration de fonction est changée en une expression de fonction, une erreur sera signalée lors de l'exécution. La raison en est qu'avant l'exécution de l'instruction où la fonction est située, le sous-sous-sous ne contient pas de référence à la fonction. C'est-à-dire que le sous-sous-marin sera attribué pendant l'étape d'exécution du code. À l'exception des différences ci-dessus, dans d'autres aspects, la syntaxe des déclarations de fonction et des expressions de fonction est équivalente.
• n'affecte pas les objets variables
var sub = fonction f (a1, a2) {console.log (typeof f); // "fonction" renvoie A1-A2; } console.log (typeof f); /-D'après l'exemple ci-dessus, nous pouvons voir que le nom de fonction F ne peut être utilisé que dans l'objet de fonction, et le nom de fonction de l'expression de la fonction n'existe pas dans l'objet variable.
Utiliser des scénarios
Il existe de nombreux scénarios d'utilisation pour les expressions de fonction. Ce qui suit décrit principalement les applications de la récursivité de la fonction et de la modularité du code.
• Récursion de la fonction
Voir l'exemple suivant:
fonction factorial (num) {if (num <= 1) {return 1; } else {return num * factorial (num - 1); }}Il s'agit d'une fonction factorielle classique, mais un problème avec cet exemple est que le nom de fonction factoriel est étroitement couplé au corps de la fonction. Si vous exécutez l'instruction suivante, vous obtiendrez une erreur:
var un autrefactorial = factoriel; factoriel = null; console.log (un autrefactorial (5)); // "non apparenté TypeError: Factorial n'est pas une fonction"
La raison d'une erreur est que la fonction factorielle sera appelée dans le corps de la fonction, et la référence à la fonction par la variable factorielle a été annulée, donc une erreur est signalée. La solution à cette situation peut généralement être résolue à l'aide d'arguments.Callee, qui pointe toujours vers la fonction actuelle, par exemple:
fonction factorial (num) {if (num <= 1) {return 1; } else {return num * arguments.callee (num - 1); }}De cette façon, vous pouvez obtenir le résultat correct en exécutant une autre fonction de factoriel ici. Cependant, en mode strict "strict", les arguments.Callee ne sont pas accessibles via des scripts. C'est comment résoudre ce problème à l'aide d'expressions de fonction, par exemple:
var factorial = (fonction f (num) {if (num <= 1) {return 1;} else {return num * f (num - 1);}}); console.log (factoriel (5)); // "120"• Modularité du code
Il n'y a pas de portée au niveau des blocs dans JavaScript, mais nous pouvons utiliser des expressions de fonction pour modulariser le code JavaScript. Le code modulaire peut encapsuler des détails qui n'ont pas besoin d'être connus de l'utilisateur et ne les exposer qu'aux interfaces pertinentes de l'utilisateur, tout en évitant la pollution à l'environnement mondial, telles que:
var person = (function () {var _name = ""; return {getName: function () {return _name;}, setName: function (newname) {_name = newname;}};} ()); personne.setName ("John"); personne.getName (); //"John"Dans cet exemple, une expression de fonction anonyme est créée, qui contient les propres variables et fonctions privées du module; Le résultat d'exécution de cette expression de fonction renvoie un objet, qui contient l'interface publique exposée par le module à l'utilisateur. Il existe de nombreuses formes spécifiques de modularité du code. Par exemple, dans certaines bibliothèques JavaScript couramment utilisées, des fonctions d'exécution immédiates similaires aux exemples suivantes sont généralement utilisées:
(function () {var _name = ""; var root = this; var personne = {getName: function () {return _name;}, setName: function (newname) {_name = newname;}}; root.person = personne;} .call (this)); personne.setName ("John"); personne.getName (); //"John"Cette méthode utilise directement l'objet contenant l'interface publique du module comme un attribut de l'objet global, afin que l'attribut de l'objet global puisse être utilisé ailleurs.
Les expressions de fonctions JavaScript cliché ci-dessus 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.