2016-11-15 9 views
2

は、それが期待どおりに動作しませこのループ作業にないのに、なぜ:I簡単な変更以下のフィボナッチ関数の場合2つの発現のため

function fibonacci(n) { 
 
    var nums = [] 
 
    var a = b = 1 
 
    for (let i = 0; i < n; i++) { 
 
    [a, b] = [b, a + b] 
 
    nums.push(a) 
 
    } 
 
    return nums 
 
} 
 

 
console.log(fibonacci(5)); 
 
// outputs: [1,2,3,5,8]

を、私は二つの文順序を変更した後、 、それは動作しません:

function fibonacci(n) { 
 
    var nums = [] 
 
    var a = b = 1 
 
    for (let i = 0; i < n; i++) { 
 
    nums.push(a) 
 
    [a, b] = [b, a + b] 
 
    } 
 
    return nums 
 
} 
 

 
console.log(fibonacci(5)); 
 
// outputs: [1,1,1,1,1]

どうしたのですか?あなたが行の末尾にセミコロンを残しためです

+5

セミコロンが必要です。 – 4castle

+0

@ 4castleこれは実際には機能しますが、セミコロンがない場合はどうなりますか? –

+2

javascriptは新しい構文( '[a、b] = [b、a + b]'のような)でセミコロンを置く場所を推測するのが最善です。 ...物語の道徳的な... **常にセミコロンを使用してください** –

答えて

5

nums.push(a) 

だからに2行をマージしています:

nums.push(a)[a, b] = [b, a + b] 

これはab変数を再割り当てしません、それは配列を索引付けしています。

セミコロンを省略するという悪い習慣から抜け出すべきです。 Javascriptではこれが許されていますが、この例で見ているように、ステートメントがどこにあるかを想定してステートメントを破るとは必ずしも推論していません。

function fibonacci(n) { 
 
    var nums = []; 
 
    var a = b = 1; 
 
    for (let i = 0; i < n; i++) { 
 
    nums.push(a); 
 
    [a, b] = [b, a + b]; 
 
    } 
 
    return nums; 
 
} 
 

 
console.log(fibonacci(5)); 
 
// outputs: [1,1,1,1,1]

+0

セミコロンの挿入は設定されたルールに従っているので、セミコロンが挿入される場所と挿入されない場所を正確に推測していないOPです。 ;-) – RobG

関連する問題