JavaScript では、変数を宣言するために var が使用されますが、この構文は厳密には必須ではなく、var で宣言せずに変数を直接使用することもできます。
などなど。たとえば、コードの特定の行で、宣言された変数 x を使用したいとします。その結果、入力またはスペルミスにより、変数は y と等価になります。実際のプログラミングプロセスでは、この種のエラーを見つけるのが難しい場合があります。 さらに、今日、同僚の紹介で、この「暗黙の宣言」の別の問題点を知りました。現在のコンテキストでこの「暗黙的」宣言を行うと、JavaScript エンジンはまず現在のコンテキストを調べて、この変数が以前に宣言されているかどうかを確認し、宣言されていない場合は、前のコンテキストに移動して検索します。はまだ宣言されていません。見つかった場合、この変数は最終的にウィンドウ上で宣言されます。
例:
コードは次のとおりです:
window. y = "hello"; function func(){ y = "OH, NO!!!"; } func(); alert(window.y); //#=> display "OH, NO!!!"
コンテキスト内のいずれかのレイヤーにそのような「暗黙的に」定義された変数がある場合、そのレイヤー内の変数は、ウィンドウ上で新しい変数を生成せずに変更されます。 。 (この種のバグは、特にカプセル化されたより複雑なコードでは非常に厄介です)
例:
コードは次のとおりです:
var x = "window.x"; function a() { var x = "a's x"; var b = function() { var c = function() { //no var! x = "c's x:"; }; alert("before c run,the b.x:" + x); c(); alert("after c run, the b.x:" + x); }; alert("a.x is:" + x); b(); alert("after b function runed, the a.x is:" + x); }; alert("before a run, window.x:" + x); a(); alert("after a run, window.x:" + x);
次のレイヤーがあります: window、func a、func b、func c は常にネストされたレイヤーとして使用されます。 window->a->b->c
window と a の両方に定義された変数
x があり、変数は b で定義されておらず、x は c で「暗黙的に」宣言されており、x は最終的に変更される変数の値。 JavaScript で変数を宣言するときは、その前に var を追加する必要があることに注意してください。
以上がJavascript var変数の暗黙的宣言方法の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。