ホームページ  >  記事  >  ウェブフロントエンド  >  ネストされた JavaScript 関数で「this」ポインタはどのように解決されますか?

ネストされた JavaScript 関数で「this」ポインタはどのように解決されますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-19 06:43:30563ブラウズ

How Does the

入れ子になった JavaScript 関数における「this」ポインターの動作

この質問は、入れ子になった関数を操作するときに「this」ポインターがどのように動作するかを理解することに関するものです。 JavaScriptで。関数をネストする場合、「this」ポインターが各スコープ内でどのように解決されるかを考慮することが重要です。

提供されたサンプル コードでは、呼び出されたときに「this」ポインターがネストされた関数「doSomeEffects()」内で見つかります。 「std_obj」オブジェクトの「displayMe()」関数内。ただし、驚くべきことに、「this」ポインタは、予想どおりの「std_obj」ではなく、「window」オブジェクトを参照します。

これは、JavaScript の「this」ポインタが呼び出しコンテキストに動的にバインドされているために発生します。関数の宣言によって静的に決定されます。代わりに、「this」の値は関数の呼び出し時に決定されます。

ネストされた関数が呼び出されるとき、「this」ポインターは明示的に設定されず、JavaScript のデフォルトの動作が引き継ぎます。デフォルトでは、明示的なコンテキストなしで呼び出された場合、「this」ポインターはグローバルの「window」オブジェクトを参照します。

この問題を解決するには、ネストされた関数のコンテキストを明示的に設定する必要があります。これは、「call()」または「apply()」メソッドを使用して実現できます。 「doSomeEffects.call(this)」を呼び出すことで、「this」ポインターを「std_obj」オブジェクトに手動でバインドできます。

「this」ポインターが明示的に設定されると、ネストされた関数はオブジェクトのプロパティにアクセスできるようになります。呼び出し元のオブジェクトを正しく呼び出します。この場合、「doSomeEffects」の「this」ポインターは「std_obj」オブジェクトを参照し、ネストされた関数が意図したとおりに動作できるようにします。

以上がネストされた JavaScript 関数で「this」ポインタはどのように解決されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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