2012-11-04 10 views
11

は、CLIながら:ジャバスクリプト(nodejs)nodejsに次のコードを実行するループのバグ

var my_function = function() {                        
    var next_value = 1 
     , value = undefined 
     , difference = undefined                        
     , prev_difference = undefined                       

    while ((typeof prev_difference === 'undefined') || (prev_difference > 0)) {        
     value = next_value 
     next_value = 2 
     difference = next_value - value 
     if (difference > prev_difference) {                     
       throw new Error('Diminishing') 
     }                             
     prev_difference = 0 
    }                              
    return next_value 
}    

for (var i = 0; i< 300; i++) { console.log(i); console.log(my_function()) } 

私は値を取得を開始ループの反復282で「1」の代わりに「2」の。なぜ私の人生は理解できないのですか?このコードの塊は、私が取り組んできた何か他のものからの削減です。そのため、ループ内には不要なif文があります。このコードを変更して実行パスが不正にならないようにするには、いくつかの方法がありますが、なぜ現在の設定で壊れているのか理解したいと思います。

また、今後このようなデバッグに役立つツールのヒントがあれば、非常に感謝しています。私はconsole.logを使ってこれを絞り込みました。

node.jsバージョンv0.8.6。 Mac OSXバージョン10.7.5で動作します。 ありがとう

+0

これは私にとってノードのバグのようです。その行動は本当に奇妙です。 (私もそれを複製することができます)*編集*それはV8のバグであり、ノードのバグではないかもしれないと思います... – Pointy

+0

トリピー。私にも起こります。 – meetamit

+0

Chromeに同じ問題がないように思われるのでV8だとは思わない? –

答えて

2

IFステートメントを取り出すと、すべての繰り返しで「2」だけが返されます。変数prev_differenceは毎回「未定義」で、これは問題を引き起こすようです。

+0

はい、私たちはそれを理解することができました。質問は*なぜ*ですか?それはしないでください。 JavaScriptで未定義の変数を扱うことは完全に有効です。 –

関連する問題