Maison  >  Article  >  interface Web  >  Pourquoi \'this\' ne fait-il pas référence à la fonction d'appel dans les rappels JavaScript ?

Pourquoi \'this\' ne fait-il pas référence à la fonction d'appel dans les rappels JavaScript ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 05:21:01884parcourir

Why Doesn't 'this' Refer to the Calling Function in JavaScript Callbacks?

Quand ceci argumente : comprendre « ceci » dans les fonctions de rappel

En JavaScript, la valeur de this dans un appel de fonction est déterminée par le contexte dans lequel la fonction est exécutée. Cependant, en passant ceci comme argument, les règles peuvent devenir compliquées.

Plus précisément, le scénario suivant se produit : lorsqu'une fonction de rappel est passée en argument, pourquoi n'est-elle pas définie sur la fonction qui appelle le rappel ?

Comprendre la hiérarchie de « ce »

Pour comprendre pourquoi ceci est défini là où il se trouve, nous devons considérer la hiérarchie des appels de fonction :

  • obj.prepareRandomFunction() définit ceci sur obj (règle n°2 de la réponse).
  • randomFunction(this.sumData.bind(this)) passe this.sumData.bind(this ) comme argument (règle n°1).
  • À l'intérieur de randomFunction, callback(data) définit ceci sur l'objet global (règle n°1).

Cependant, avant que randomFunction n'appelle le rappel, il utilise this.sumData.bind(this) pour créer une nouvelle fonction (règle n°5). Cette nouvelle fonction appelle la fonction de rappel d'origine, mais maintenant avec celle-ci liée à obj (l'argument passé à bind).

Implications pour les fonctions de rappel

Lors du passage d'une méthode en guise de rappel, il est crucial de comprendre qu'il ne sera pas appelé obj.method(). Cela signifie que this n'aura pas la valeur correcte dans la fonction de rappel. Pour contourner ce problème, vous pouvez utiliser bind() pour définir la valeur de this dans le rappel.

Autres notes utiles

  • Règle n°6 dans la réponse décrit comment les fonctions fléchées ES6 conservent la valeur lexicale actuelle de this, même dans les fonctions de rappel.
  • .apply() et .call() peuvent être utilisées pour créer de nouveaux appels de fonction avec des valeurs spécifiques de this.
  • bind() peut être utilisé pour créer de nouvelles fonctions qui appellent la fonction d'origine avec une valeur personnalisée de this.
  • Comprendre la nature complexe de cela est essentiel pour un codage JavaScript efficace et pour maîtriser des concepts tels que rappels.

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