Table des matières
1. Expression de fonction vs déclaration de fonction
2. Déclaration de fonction
3. Expression de fonction
4. 总结
Maison interface Web js tutoriel Expression de fonction VS déclaration de fonction en JS, parlons de leurs différences

Expression de fonction VS déclaration de fonction en JS, parlons de leurs différences

Jul 01, 2021 am 10:20 AM
javascript déclaration de fonction

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.

Expression de fonction VS déclaration de fonction en JS, parlons de leurs différences

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); // ???
Copier après la connexion

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
Copier après la connexion

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 
});
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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;
}
Copier après la connexion

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);
Copier après la connexion

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
});
Copier après la connexion

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]
Copier après la connexion

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
Copier après la connexion

试一试: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() { ... }
Copier après la connexion

试一试: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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Paramètres par défaut dans les déclarations de fonctions C++ : une analyse complète de leur déclaration et de leur utilisation Paramètres par défaut dans les déclarations de fonctions C++ : une analyse complète de leur déclaration et de leur utilisation May 02, 2024 pm 03:09 PM

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 mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

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 mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

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

Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

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 mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

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.

Quel impact a l'ordre de déclaration et de définition des fonctions C++ ? Quel impact a l'ordre de déclaration et de définition des fonctions C++ ? Apr 19, 2024 pm 01:42 PM

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 : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

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 simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

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

See all articles