for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
上記がグローバル変数を作成すると述べるのは正しくありませんi
。常にvar
変数を宣言するために使用する必要があると思います(意図的に「変数」ではなく「プロパティ」が必要な場合を除きます-これは、99.99%のJSコーディングシナリオではほとんどありません...)
var
初期値を に代入するときに省略i
すると、ローカル変数またはグローバル変数が作成i
されず、グローバル オブジェクトのプロパティが作成されます (グローバル変数のように見えたり動作したりする場合がありますが、微妙な違いがいくつかあります)。
より良いでしょう:
var i;
for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
現在、ループはグローバル変数(または、このコードが関数内にある場合はi
関数ローカル変数) を使用しています。i
これについては、var キーワードの機能と変数と Javascript のプロパティで詳細を参照してください。
-- 注: 少し混乱するのは、たとえば 2 番目のループで変数を再宣言できることです。
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
これは有効なようです(テストしてもエラーはありません)。JavaScript で変数を再宣言できるようですが、特別な場合を除いて、すべてが良い考えであるとは限りません。[Google アナリティクスが変数の「安全な」再宣言をどのように利用するかについて言及しているこの関連する質問を参照してください] ( JavaScript 変数の再宣言)
i
この関連する SO の質問では、JS での変数の再宣言 (および のようなループ変数) についていくつかの議論があります:ループ内またはループ外で変数を宣言する
変数の単一宣言の JavaScript パターンのイベントがあります。