ホームページ  >  記事  >  ウェブフロントエンド  >  入れ子になった JavaScript 関数で「this」ポインタがグローバル オブジェクトを指すのはなぜですか?

入れ子になった JavaScript 関数で「this」ポインタがグローバル オブジェクトを指すのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-19 06:48:30534ブラウズ

Why Does the

入れ子関数における JavaScript "this" ポインターの謎

JavaScript コード スニペットで、"this" に関して予期しない動作が発生しました。 " 入れ子関数内のポインタ。オブジェクト メソッド内でネストされた関数を定義しているにもかかわらず、ネストされた関数内の "this" ポインターはグローバル "window" オブジェクトを指します。

"this" ポインターの動作は、次の関数呼び出しメソッドによって決まります。 JavaScript。 3 つの主なメソッドがあります:

  1. 直接呼び出し: someThing.someFunction(arg1, arg2, argN)

    • このメソッドでは、「this」ポインタは次のメソッドを参照します。関数を呼び出すオブジェクト (この場合は someThing.
  2. call() による関数呼び出し): someFunction.call(someThing, arg1, arg2, argN)

    • call() 関数は、提供されたオブジェクト (この場合は someThing) への "this" ポインターを明示的に設定します。
  3. apply() による関数呼び出し: someFunction.apply(someThing, [arg1, arg2, argN])

    • call() と同様に、apply() 関数は、指定されたオブジェクトへの "this" ポインターを設定しますが、代わりに引数の配列。

指定した例では、明示的な関数呼び出しメソッドを使用せずに、ネストされた関数が呼び出されます。その結果、「this」ポインタはデフォルトでグローバル オブジェクトになります。これは通常、ブラウザ環境の「ウィンドウ」オブジェクトです。

「this」ポインタの動作を明示的に指定するには、次の変更を使用できます。 :

  1. std_obj.displayMe の代わりに std_obj.displayMe() を使用します。
  2. オブジェクトの this ポインターを使用して、ネストされた関数を明示的に定義します。 var doSomeEffects = function() { var that = this; ... }
  3. call() または apply() 関数を使用して、「this」ポインターを設定します: doSomeEffects.call(std_obj);

これらのメソッドのいずれかを利用するを使用すると、ネストされた関数内の「this」ポインターの動作を制御し、目的のオブジェクトを確実に参照できるようにすることができます。

以上が入れ子になった JavaScript 関数で「this」ポインタがグローバル オブジェクトを指すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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