Junior
Quelle est la différence entre les fonctions fléchées et les fonctions normales en JavaScript?
sobes.tech IA
Réponse de l'IA
- Syntaxe :
- Fonction normale :
function myFunction() { ... } - Fonction flèche :
() => { ... }ouparam => { ... }
- Fonction normale :
- Contexte
this:- Fonction normale :
thisest déterminé par le contexte d'appel. - Fonction flèche :
thisest hérité lexicalement de la portée environnante (n'a pas son proprethis).
- Fonction normale :
- Constructeurs :
- Fonction normale : Peut être utilisée comme constructeur (
new myFunction()). - Fonction flèche : Ne peut pas être utilisée comme constructeur.
- Fonction normale : Peut être utilisée comme constructeur (
- Objet
arguments:- Fonction normale : Possède son propre objet
argumentscontenant les arguments passés. - Fonction flèche : Ne possède pas son propre objet
arguments, l'accès aux arguments se fait via des paramètres rest (...args).
- Fonction normale : Possède son propre objet
- Fonctions nommées :
- Fonction normale : Peut être nommée (
function myFunction() { ... }). - Fonction flèche : Par défaut anonyme, assignée à une variable pour la nommer (
const myFunction = () => { ... }).
- Fonction normale : Peut être nommée (
- Retour implicite :
- Fonction normale : Nécessite explicitement
returnpour retourner une valeur (sauf dans les cas simples comme IIFE). - Fonction flèche : Dans un corps en une seule ligne, peut retourner implicitement le résultat d'une expression sans
return.
- Fonction normale : Nécessite explicitement
Tableau comparatif :
| Caractéristique | Fonction normale | Fonction flèche |
|---|---|---|
| Syntaxe | function name() { ... } |
() => { ... } |
Contexte this |
Dynamique (selon l'appel) | Lexical (de la portée parent) |
| Constructeur | Oui | Non |
Objet arguments |
Oui | Non (utilise paramètres rest) |
| Nomination | Peut être nommée | Anonyme (assignée) |
| Retour implicite | Non (nécessite généralement return) |
Oui (pour corps en une ligne) |
// Exemple de fonctions normales
function standardFunction() {
console.log(this); // Dépend du contexte d'appel
console.log(arguments); // Objet arguments accessible
}
const obj = {
method: standardFunction
};
standardFunction(); // `this` sera window (dans le navigateur) ou undefined (en mode strict)
obj.method(); // `this` sera obj
new standardFunction(); // `this` sera la nouvelle instance
// Exemple de fonctions fléchées
const arrowFunction = () => {
console.log(this); // Hérite `this` du contexte environnant (par exemple, Global ou module)
// console.log(arguments); // Erreur, `arguments` non disponible
};
const outerObj = {
outerMethod: function() {
const innerArrowFunction = () => {
console.log(this); // Hérite `this` de outerMethod (qui est outerObj)
};
innerArrowFunction();
}
};
arrowFunction(); // `this` sera window (dans le navigateur) ou {} (en Node.js)
outerObj.outerMethod(); // `this` dans innerArrowFunction sera outerObj
// Retour implicite dans fonction flèche
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5
// Fonction normale avec retour explicite
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, 3)); // 6
// La fonction flèche ne peut pas être un constructeur
// new arrowFunction(); // Erreur : TypeError: arrowFunction_1 n'est pas un constructeur