Maison > interface Web > js tutoriel > Pourquoi `bind()` ne fonctionne-t-il pas avec les fonctions fléchées en JavaScript ?

Pourquoi `bind()` ne fonctionne-t-il pas avec les fonctions fléchées en JavaScript ?

Susan Sarandon
Libérer: 2024-12-08 22:39:11
original
897 Les gens l'ont consulté

Why Doesn't `bind()` Work with Arrow Functions in JavaScript?

Liaison des fonctions fléchées : une explication

Lors de l'utilisation des fonctions fléchées en JavaScript, les développeurs peuvent rencontrer un comportement inattendu concernant la liaison de « ceci ». Contrairement aux fonctions normales, les fonctions fléchées conservent une portée lexicale, ce qui signifie qu'elles héritent de la liaison « ceci » de l'environnement dans lequel elles ont été définies. Par conséquent, il n'est pas possible de lier à nouveau « ceci » dans une fonction fléchée.

Considérez cet exemple :

var f = () => console.log(this);
var o = {'a': 42};
var fBound = f.bind(o);
fBound();
Copier après la connexion

Dans cet extrait de code, nous essayons de lier la fonction fléchée « f » à l'objet 'o' en utilisant la méthode '.bind()'. Cependant, lorsque nous appelons « fBound », il génère l'objet global « window » au lieu de « o ».

En effet, les fonctions fléchées héritent de leur liaison « this » de l'environnement lexicalement englobant, qui dans ce cas est le contexte d’exécution global. Par conséquent, 'f()' et 'fBound()' font toujours référence au 'this' global.

Pour éviter ce problème, il est recommandé d'utiliser des fonctions régulières lorsqu'une liaison est requise. Ces fonctions créent un nouveau contexte d'exécution, vous permettant de définir explicitement la liaison 'this' à l'aide de la méthode '.bind()'.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal