ホームページ  >  記事  >  ウェブフロントエンド  >  「this」が JavaScript コールバックの呼び出し関数を参照していないのはなぜですか?

「this」が JavaScript コールバックの呼び出し関数を参照していないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 05:21:01883ブラウズ

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

this が主張する場合: コールバック関数の 'this' を理解する

JavaScript では、関数呼び出し内の this の値は、関数が実行されるコンテキスト。ただし、これを引数として渡す場合、ルールが複雑になる可能性があります。

具体的には、次のシナリオが発生します。コールバック関数が引数として渡されるとき、なぜこれが呼び出し元の関数に設定されないのかコールバック?

「this」の階層を理解する

これがどこに設定されているかを理解するには、関数呼び出しの階層を考慮する必要があります。

  • obj.prepareRandomFunction() は、これを obj に設定します (回答のルール #2)。
  • randomFunction(this.sumData.bind(this)) は、this.sumData.bind(this) を渡します) を引数として指定します (ルール #1)。
  • randomFunction 内で、callback(data) はこれをグローバル オブジェクトに設定します (ルール #1)。

ただし、randomFunction が呼び出す前に、コールバックでは、this.sumData.bind(this) を使用して新しい関数を作成します (ルール #5)。この新しい関数は元のコールバック関数を呼び出しますが、今度は obj (bind に渡される引数) にバインドされます。

コールバック関数の影響

メソッドを渡すときコールバックとしては、obj.method() として呼び出されないことを理解することが重要です。これは、コールバック関数内に正しい値が存在しないことを意味します。この問題を回避するには、bind() を使用してコールバック内で this の値を設定します。

その他の役立つメモ

  • ルール #6答えは、ES6 アロー関数がコールバック関数内であっても this の現在の字句値を維持する方法を説明しています。
  • .apply() と .call() を使用して、this の特定の値を持つ新しい関数呼び出しを作成できます。
  • bind() を使用して、this のカスタム値で元の関数を呼び出す新しい関数を作成できます。
  • この複雑な性質を理解することは、効果的な JavaScript コーディングや次のような概念を習得するために不可欠です。コールバック。

以上が「this」が JavaScript コールバックの呼び出し関数を参照していないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。