var
単独では割り当てを実行しません。これは、var
発生するスコープ全体で変数名を使用する場合、グローバルではなくローカル変数について話していることを示すだけです(物議を醸すデフォルト)。var
関数が解析されるときに発見され、そのスコープ全体で保持されるため、どこに置くかは関係ありません。
var a= 0;
function foo() {
a= 1;
return a;
var a;
}
var b= foo();
alert('global a='+a+', local a='+b);
結果global a= 0, local a= 1
:var
の実行中にステートメントに到達することはありませんが、ローカル変数のfoo()
作成には効果的です。a
したがってvar x
、同じスコープで2回目の宣言を行うことは、完全に冗長です。ただし、通常は同じ関数内で2回目の独立した使用のためにローカル変数名を再利用する場合は、それでも実行できる場合があります。最も一般的に:
for (var i= 0; i<onething.length; i++) {
...do some trivial loop...
}
for (var i= 0; i<anotherthing.length; i++) {
...do another trivial loop...
}
あなたは確かに2番目を省略することができますvar
、そしてそのようなツールjslint
はあなたにそうすることを要求するでしょうが、それは実際には良い考えではないかもしれません。
i
後で最初のループを変更または削除して、がであると宣言されなくなったと想像してくださいvar
。ここで、残りの2番目のループは、ローカル変数からグローバル変数に意味を突然変更します。最初のループを更新するときに、2番目のループがそれに隠れた依存関係を持っていることに気付かない場合(そして、目がパターンfor(...=0 ; ...<...; ...++)
を「ああ、それは単なる標準のイテレーター」にどのように消去するかを考えると、気付かない可能性があります)。微妙で煩わしいデバッグの問題があります。