2016-10-05 2 views
0

私はループを書くこれらの2つの方法の違いを理解しようとしています。両方のコードスニペットの結果は異なります。どうして? forループforループ(Javascript)の外部に結果変数を保存することの違いは何ですか?

  1. :変数がループ内にある出力が、異なる結果を与えます。 forループ

    for (var n = 1; n <= 100; n++) { 
        var output = ""; 
        if (n % 3 == 0) 
        output += "Fizz"; 
        if (n % 5 == 0) 
        output += "Buzz"; 
        console.log(output || n); 
    } 
    
  2. 変数がループの外側にある出力が、異なる結果を与えます。両方の場合において

    var output = ""; 
    for (var n = 1; n <= 100; n++) { 
        if (n % 3 == 0) 
        output += "Fizz"; 
        if (n % 5 == 0) 
        output += "Buzz"; 
        console.log(output || n); 
    } 
    
+3

1.結果が異なる場合は、明確にする必要があります。 2.最初のケースでは、 'output'はすべての繰り返しで空の文字列に再初期化されます。 – UnholySheep

+1

これは実際には初期化についてのものではありません。 – Pointy

+1

'var output'のような変数宣言は、先頭に持ち上げられます。 'output =" "'のような代入はそうではありません。 – Oriol

答えて

1

それはループの外側であるかのように、output宣言が治療されます。重要である何、しかし、output初期化です:

var output = ""; 

は、空の文字列("")に変数を設定します。ループ内に初期化を置くと、各反復の開始時に変数の値がクリアされます。以前の繰り返しがやろうとしたすべての作業が消去されます。

だから、あなたのコードと仮定すると、それが書かれていたかのように、いくつかの機能では、最初の例が解釈され表示されます。

function whatever() { 
    var output; 
    // ... 
    for (var n = 1; n <= 100; n++) { 
    output = ""; 
    if (n % 3 == 0) 
     output += "Fizz"; 
    if (n % 5 == 0) 
     output += "Buzz"; 
    console.log(output || n); 
    } 
    // ... 
} 

明らかに、各反復の開始時に戻っ""に変数を設定し、全体を破りますループのポイント。

+0

外に出たらどうしていますか? –

+0

@ K.Kaurもしそれがループの外にあれば、初期化はループが始まる前に一度だけ起こります。 – Pointy

+0

理解してくれてありがとう! –

関連する問題