


Expression de fonction VS déclaration de fonction en JS, parlons de leurs différences
En JavaScript, les déclarations de fonction et les expressions de fonction utilisent toutes deux le mot-clé function pour créer des fonctions. Pensez-vous qu'elles sont très similaires et peuvent être facilement confondues ? L'article suivant vous amènera à analyser les expressions de fonction et les déclarations de fonction, et à présenter les différences entre les expressions de fonction et les déclarations de fonction.
En JavaScript, le mot-clé function
peut faire un travail simple : créer une fonction. Cependant, utiliser des mots-clés pour définir des fonctions permet de créer des fonctions avec des propriétés différentes.
Dans cet article, nous voyons comment utiliser le mot-clé function
pour définir des déclarations de fonction et des expressions de fonction, et quelles sont les différences entre ces deux fonctions.
1. Expression de fonction vs déclaration de fonction
La déclaration de fonction et l'expression de fonction sont 2 façons de créer des fonctions à l'aide du mot-clé function
.
À titre d'exemple pour illustrer la différence, nous créons deux versions de la fonction sommes :
function sumA(a, b) { return a + b; } (function sumB(a, b) { return a + b; }); sumA(1, 2); // ??? sumB(1, 2); // ???
Essayez-le vous-même : https://jsfiddle.net/dmitri_pavlutin/8b46yokr/2 /
En général, définissez les fonctions (sumA函数
) comme d'habitude. Dans un autre cas, la fonction est placée entre parenthèses (sumB函数
).
Que se passe-t-il si sumA(1,2)
et sumB(1,2)
sont appelés ?
Comme prévu, sumA(1, 2)
renvoie 3
. Cependant, l'appel de sumB(1, 2)
lève une exception : Uncaught ReferenceError: sumB is not defined
.
La raison est que sumA
est créé à l'aide d'une déclaration de fonction qui crée une variable de fonction (avec le même nom que le nom de la fonction) dans la portée actuelle. Mais sumB
est créé à l'aide d'une expression de fonction (en la mettant entre parenthèses) qui ne crée pas de variable de fonction dans la portée actuelle.
Si vous souhaitez accéder à une fonction créée à l'aide d'une expression de fonction, enregistrez l'objet fonction dans une variable :
// Works! const sum = (function sumB(a, b) { return a + b; }); sum(1, 2); // => 3
Fonction si l'instruction commence par la déclaration du mot-clé `function
`, sinon une expression de fonction.
// 函数声明:以`function`关键字开头 function sumA(a, b) { return a + b; } // 函数表达式:不以`function`关键字开头 const mySum = (function sumB(a, b) { return a + b; }); // 函数表达式:不以`function`关键字开头 [1, 2, 3].reduce(function sum3(acc, number) { return acc + number });
D'un point de vue général, les déclarations de fonction sont utiles pour créer des fonctions autonomes, mais les expressions de fonction peuvent être utilisées comme rappels.
Maintenant, nous examinons de plus près le comportement des déclarations de fonction et des expressions de fonction.
2. Déclaration de fonction
Comme vous l'avez vu dans l'exemple précédent, sumA
est une déclaration de fonction :
// Function declaration function sumA(a, b) { return a + b; } sumA(4, 5); // => 9
Lorsqu'une instruction A La déclaration de fonction se produit lorsqu'elle contient le mot-clé function
, suivi du nom de la fonction, d'une paire de parenthèses (param1, param2, paramN)
avec des paramètres et du corps de la fonction entouré d'une paire d'accolades {}
. La déclaration de fonction
crée une variable de fonction : une variable portant le même nom que le nom de la fonction (par exemple, sumA
dans l'exemple précédent). La variable de fonction est accessible dans la portée actuelle (avant et après la déclaration de la fonction), et même dans la portée de la fonction elle-même.
Les variables de fonction sont généralement utilisées pour appeler des fonctions ou pour transmettre des objets de fonction à d'autres fonctions (en passant à des fonctions d'ordre supérieur).
Par exemple, écrivez une fonction sumArray(array)
qui accumule récursivement les éléments d'un tableau (le tableau peut contenir des nombres ou d'autres tableaux) :
sumArray([10, [1, [5]]]); // => 16 function sumArray(array) { let sum = 0; for (const item of array) { sum += Array.isArray(item) ? sumArray(item) : item; } return sum; } sumArray([1, [4, 6]]); // => 11
Essayez-le : https : //jsfiddle.net/dmitri_pavlutin/n7wcryuo/
function sumArray(array) { ... }
est une déclaration de fonction.
Les variables de fonction sumArray
contenant des objets fonction sont disponibles dans la portée actuelle : avant sumArray([10, [1, [5]]])
et après sumArray([1, [4, 6]])
, la déclaration de fonction et la portée sumArray([1, [4, 6]])
de la fonction elle-même (les appels récursifs sont autorisés ).
En raison du levage, les variables de fonction sont disponibles avant que la fonction ne soit déclarée.
2.1 Notes sur la déclaration de fonction
La syntaxe de déclaration de fonction consiste à créer des fonctions indépendantes. Les déclarations de fonctions doivent être dans la portée globale, ou directement dans la portée d'autres fonctions :
// Good! function myFunc1(param1, param2) { return param1 + param2; } function bigFunction(param) { // Good! function myFunc2(param1, param2) { return param1 + param2; } const result = myFunc2(1, 3); return result + param; }
Pour la même raison, cela n'est pas recommandé dans les conditions (if
) et les boucles (while
, for
) Utilisez les déclarations de fonction :
// Bad! if (myCondition) { function myFunction(a, b) { return a * b; } } else { function myFunction(a, b) { return a + b; } } myFunction(2, 3);
Utilisez des expressions de fonction pour une meilleure exécution de la création conditionnelle de fonctions.
3. Expression de fonction
L'expression de fonction se produit lorsque le mot-clé function
crée une fonction (avec ou sans nom) dans un mode d'expression.
Ce qui suit est un exemple de fonction créée à l'aide d'une expression :
// Function expressions const sum = (function sumB(a, b) { return a + b; }); const myObject = { myMethod: function() { return 42; } }; const numbers = [4, 1, 6]; numbers.forEach(function callback(number) { console.log(number); // logs 4 // logs 1 // logs 1 });
crée deux types de fonctions dans une expression de fonction :
- if fonction dans une expression Sans un nom, comme
function(){return 42}
, c'est une expression de fonction anonyme - Si la fonction a un nom, comme
sumB
et le rappel dans l'exemple précédent, alors c'est une expression de fonction nommée
3.1 Remarques sur les expressions de fonction
Les expressions de fonction conviennent aux rappels ou aux fonctions créées comme conditions :
// Functions created conditionally let callback; if (true) { callback = function() { return 42 }; } else { callback = function() { return 3.14 }; } // Functions used as callbacks [1, 2, 3].map(function increment(number) { return number + 1; }); // => [2, 3, 4]
Si une expression de fonction nommée a été créée, veuillez noter que cette variable de fonction n'est disponible que dans la portée de la fonction créée :
const numbers = [4]; numbers.forEach(function callback(number) { console.log(callback); // logs function() { ... } }); console.log(callback); // ReferenceError: callback is not defined
试一试:https://jsfiddle.net/dmitri_pavlutin/sujwmp10/2/
callback
是一个命名的函数表达式,因此callback函数变量仅在callback()
函数使用域可用,而在外部则不可用。
但是,如果将函数对象存储到常规变量中,则可以在函数作用域内外从该变量访问函数对象:
const callback = function(number) { console.log(callback); // logs function() { ... } }; const numbers = [4]; numbers.forEach(callback); console.log(callback); // logs function() { ... }
试一试:https://jsfiddle.net/dmitri_pavlutin/1btmrcu2/1/
4. 总结
根据使用function
关键字创建函数的方式,可以通过两种方法来创建函数:函数声明和函数表达式。
留个问题: function sum(a, b) { return a + b } + 1
是函数声明还是函数表达式,可以在留言中说出你的答案。
英文文章地址:https://dmitripavlutin.com/javascript-function-expressions-and-declarations/
作者:Dmitri Pavlutin
更多编程相关知识,请访问:编程视频!!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Les paramètres par défaut en C++ offrent la possibilité de spécifier des valeurs par défaut pour les paramètres de fonction, améliorant ainsi la lisibilité, la simplicité et la flexibilité du code. Déclarez les paramètres par défaut : ajoutez le symbole "=" après le paramètre dans la déclaration de la fonction, suivi de la valeur par défaut. Utilisation : Lorsque la fonction est appelée, si des paramètres facultatifs ne sont pas fournis, les valeurs par défaut seront utilisées. Cas pratique : Une fonction qui calcule la somme de deux nombres. Un paramètre est obligatoire et l'autre est facultatif et a une valeur par défaut de 0. Avantages : lisibilité améliorée, flexibilité accrue, code passe-partout réduit. Remarque : Il ne peut être spécifié que dans la déclaration, il doit être à la fin et les types doivent être compatibles.

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

En C++, l'ordre des déclarations et des définitions de fonctions affecte le processus de compilation et de liaison. Le plus courant est que la déclaration vient en premier et la définition après ; vous pouvez également utiliser « forwarddeclaration » pour placer la définition avant la déclaration ; si les deux existent en même temps, le compilateur ignorera la déclaration et n'utilisera que la définition.

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest
