1

重複の可能性:
JavaScript変数はループの外側または内側を宣言しますか?

だから..次のスタイルを使うべきだという記事をたくさん見ました。

var i;
for(i=0;i <= 10; i++) {
  // do something here
}

私はしばらくの間上記のスタイルを使用していますが、読みやすさを除いて本当に役立つのだろうかと思います。

下記と同じではないですか?

for(var i=0; i<=10; i++) {

}
4

3 に答える 3

2

何らかの理由で(決してそうではないはずです)、関数のコンテキスト外で同じ名前でグローバル変数を宣言した場合は、違いが生じます。

http://jsfiddle.net/bFRKU/

var i = 'global'; 

function test(){
    alert(i);   
    for(var i = 0; i < 10; i++){
     //do something   
    }
}
test(); 

上記の例では、アラートが「未定義」を返していることがわかります。これは、変数定義が関数の先頭に持ち上げられているためです(関数内で宣言されている場所に関係なく)。したがって、実際には、上記は次のように解釈されます。

http://jsfiddle.net/bFRKU/1/

var i = 'global'; 

function test(){
    var i; 
    alert(i);   
    for(i = 0; i < 10; i++){
     //do something   
    }
}
test(); 

したがって、アラートは「未定義」です。最終的に、変数宣言を関数の先頭に配置する唯一の理由は、この潜在的な混乱を減らすためです。。

于 2012-09-27T23:33:51.417 に答える
1

2つの間に有意差はありません-純粋に意見の問題です。

于 2012-09-27T23:28:23.057 に答える
1
  1. それは同じだ
  2. これが行われるのは、JSでは、関数の上部にある1つの場所で変数が宣言されるようにするためです。ブロックスコープがなく、スコープチェーンの解決エラーが発生する可能性があるためです。
    エラーは、宣言することvarではなく、ブロックスコープに背を向けることを忘れて依存することから発生します(存在しないため、ブロックスコープは存在しません)。
于 2012-09-27T23:29:16.253 に答える