JavaScriptでは、VARは変数を宣言するために使用されますが、この構文は厳密には必要ありません。多くの場合、VARを使用してそれを宣言することなく、変数を直接使用できます。
コードコピーは次のとおりです。
var x = "xx";
y = "xxx";
等々。これには問題があります。たとえば、コードの行で、宣言された変数xを使用したいと思います。その結果、タイピングまたはスペルミスのために、この変数はyとして記述されます。結果は、変数yの「暗黙の」宣言に相当します。実際のプログラミングでは、このエラーを検出するのが難しい場合があります。
現在のコンテキストでこの「暗黙の」宣言を行うと、JavaScriptエンジンはまず、この変数が現在のコンテキストで以前に宣言されたかどうかを調べます。そうでない場合は、以前のレベルのコンテキストで検索します。発見されていない場合、最終的にウィンドウ上のこの変数を宣言します!
例えば:
コードは次のとおりです。
ウィンドウ。 y = "hello"; function func(){y = "oh、no !!!"; } func();アラート(window.y); //#=>「ああ、いいえ!!!」を表示コンテキスト内のレイヤーが変数の「暗黙的な」定義を持っている場合、そのレイヤーの変数は、ウィンドウ上に新しい変数を生成せずに変更されます。 (この種のバグは非常に迷惑です、特にカプセル化されたより複雑なコード)
例えば:
コードは次のとおりです。
var x = "window.x";関数a(){var x = "a's x"; var b = function(){var c = function(){// no var! x = "c's x:"; };アラート( "cが実行される前、bx:" + x); c();アラート( "c run後、bx:" + x); }; alert( "ax is:" + x); b(); alert( "b関数が実行された後、xは:" + x); }; alert( "実行前、window.x:" + x); a(); alert( "runの後、window.x:" + x);ここには、次のレイヤーがあります。ウィンドウ、FUNC A、FUNC B、FUNC Cは常にレベルにネストされています。ウィンドウ - > a-> b-> c
ウィンドウとAの両方の変数xの両方が定義されており、Bは定義されていません。 xはcで宣言され、最終的に変数aの値を変更します。
JavaScriptでは、変数を宣言すると、その前にVARを追加する必要があります。