コンソールでの JavaScript 変数宣言が「未定義」になる理由
構文 var a; を使用して JavaScript コンソールで変数を宣言すると、 「未定義」と出力されます。この動作は驚くべきものであり、Stack Overflow の投稿でよく取り上げられています。ただし、これらの議論では、なぜこれが起こるのかを十分に説明できません。
コンソールの動作は、JavaScript が式を評価する方法の直接の結果です。ステートメント var a; を評価するとき、JavaScript はそれを独自の式とみなしてその結果を返しますが、その結果は確かに「未定義」です。
なぜ変数を宣言するときにコンソールにも「未定義」と出力されるのかはさらに不可解です。 var a = 3 などの初期値を使用します。驚くべきことに、JavaScript のすべての変数宣言ステートメント (var と function の両方) は、「実際の」結果を持つ別のステートメントがある場合、「未定義」を返します。
たとえば:
> var a = 3; undefined > var a = 3; a = 4; 4 > var a = 3; a = 4; var a = 5; function f() {}; 4
この動作は eval ステートメントに根ざしており、ECMAScript 仕様によれば、
var a = 4 ステートメントの評価は (normal、empty、empty) を返します。これは、「未定義」を返す基準を満たしています。
ただし、eval は、評価されたプログラムの完了値が空でない場合は、最後のステートメントの値が返されます。最後の例では、a = 4 が最後のステートメントであるため、その値 (4) が返されます。
要約すると、これらの宣言は次のように評価されると「未定義」を返すため、JavaScript のコンソールは変数宣言に対して「未定義」を出力します。表現。この動作は、特に初期値を変数に割り当てる場合に混乱を招く可能性がありますが、これは JavaScript の式とステートメントの基礎となる評価メカニズムに起因しています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3