関数内でグローバル変数が最初に未定義である場合に遭遇した動作は、JavaScript の変数ホイスティングに起因している可能性があります。機構。 JavaScript は、実際の値の割り当てがコードの後半で行われる場合でも、変数の宣言を周囲のスコープの先頭に自動的に引き上げます。
この例では、グローバル変数の値は初期値 10 で宣言されています。ただし、テスト関数内では、同じ名前 (値) を持つローカル変数も値が割り当てられずに宣言されています (デフォルトは未定義)。
関数内の最初の console.log ステートメントは、次のことを試みます。グローバル値にアクセスしますが、ローカル値がすでにホイストされているため、ローカル値が優先されます。結果として、最初の呼び出しでは unknown が出力されます。続いて、関数内の 2 番目の console.log ステートメントは、ローカル値変数 (20) に割り当てられた値を表示します。
この巻き上げ現象は、現在の実行コンテキスト内の変数と関数の両方に当てはまります。宣言だけがホイストされ、割り当てはホイストされないことを理解することが重要です。これは、変数はスコープ全体でアクセス可能ですが、コードが代入ステートメントに達するまで値が割り当てられない可能性があることを意味します。
たとえば、次のコード スニペットを考えてみましょう:
var test = 'start'; function end() { test = 'end'; var test = 'local'; } end(); alert(test);
驚くべきことに、このコードは、関数 end がテスト変数の値を変更しているように見えるにもかかわらず、start を出力します。これは、end 関数内では、新しいローカル変数宣言が優先され、グローバル変数は変更されないためです。
変数ホイスティングはコードを簡素化できますが、意図しない動作を避けるためにその影響を認識することが重要です。変数のスコープを適切に設定し、巻き上げメカニズムを完全に理解することは、コード構造を維持し、潜在的なエラーを防ぐのに役立ちます。
以上がJavaScript 関数内でグローバル変数が未定義なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。