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
Susan Sarandonoriginal
2024-12-08 22:39:11895parcourir

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();

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!

Déclaration:
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