Node.js のモジュールと関数の謎の「this」
Node.js では、「this」キーワードの意味を確認できます。使用される文脈によって異なります。これは、特にモジュールをロードして関数を操作する場合に混乱を招く可能性があります。
モジュール スコープ
require() を使用して JavaScript ファイルを Node モジュールとしてロードする場合、モジュール内のコードはラッパー関数内で実行されます。このラッパー関数は、「this」キーワードを module.exports オブジェクトに設定します。提供された例では、これは空のオブジェクトです。
関数スコープ
ただし、関数内では、「this」キーワードは関数の実行ごとに決定されます。 。非厳密モードでは、関数が明示的な "this" 値を指定せずに () 構文で呼び出された場合 (aFunction() など)、"this" はグローバル オブジェクトに設定されます。
この動作は次のとおりです。厳密モードでは異なります。「this」は関数内で未定義です。あなたの例では、aFunction() が非厳密モードで呼び出され、その結果、「this」がグローバル オブジェクトに設定されます。
なぜ格差があるのですか?
この違いの理由は、モジュール スコープで、「this」キーワードが Node.js 環境によって挿入されるためです。この注入により、モジュールは参照を明示的に設定せずに module.exports オブジェクトにアクセスできるようになります。
ただし、関数スコープでは、「this」キーワードは Node.js によって注入されません。代わりに、その値は関数の呼び出しメカニズムによって決定されます。この例では、「this」値を指定せずに aFunction() が呼び出され、その結果、「this」キーワードがグローバル オブジェクトを参照します。
この違いは、「this」が含まれるコンテキストを理解することの重要性を強調しています。 Node.js で使用されます。これは、適切に考慮されないとコードの動作に影響を及ぼし、予期しない結果を招く可能性があるためです。
以上がNode.js モジュールと関数で「this」の動作はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。