Maison  >  Article  >  interface Web  >  Qu'est-ce qui détermine la valeur de « this » lorsqu'une fonction de rappel est appelée ?

Qu'est-ce qui détermine la valeur de « this » lorsqu'une fonction de rappel est appelée ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 03:56:02997parcourir

What Determines the Value of `this` When a Callback Function Is Called?

Lorsque la valeur de this est définie

En JavaScript, la valeur de this est déterminée par la manière dont une fonction est appelée. Il existe six façons principales de définir cela :

  1. Appel de fonction normal : il est défini sur l'objet global (par exemple, une fenêtre dans un navigateur) ou non défini en mode strict.
  2. Appel de méthode : ceci est défini sur l'objet sur lequel la méthode est appelée.
  3. .apply() ou .call() : this est défini sur l'objet passé comme premier argument.
  4. new Opérateur : Lorsqu'une fonction est appelée avec new, un nouvel objet est créé et celui-ci est défini sur cet objet.
  5. .bind() : Crée une nouvelle fonction stub où celle-ci est liée à l'objet passé comme premier argument.
  6. Fonction ES6 Fat Arrow : this est lié à la valeur lexicale de la portée englobante.

Le cas des fonctions de rappel

Dans votre exemple :

<code class="javascript">randomFunction(this.sumData.bind(this));</code>
  • this.sumData .bind(this) utilise .bind() pour lier ceci à l'objet obj.
  • Par conséquent, lorsque randomFunction appelle la fonction de rappel, celle-ci est définie sur obj à cause de .bind().
  • Si vous deviez échanger this.sumData.bind(this) avec callback(data), this à l'intérieur de randomFunction serait défini sur l'objet global (ou non défini en mode strict).

Ceci est car le rappel est passé comme référence à this.sumData.bind(this), mais lorsque randomFunction appelle le rappel, il le définit selon les règles d'un appel de fonction normal.

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