11

nodejs cli で次のコードを実行します。

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 で、「2」ではなく「1」の値を取得し始めます。私の人生では理由を理解できません。このコードのチャンクは、私が取り組んできた他のものからの削減であるため、一見不必要な if ステートメントがループ内にあります。実行パスが台無しにならないようにこのコードを変更する方法はいくつかありますが、現在のセットアップで問題が発生する理由を理解したいと思います。

また、将来このようなデバッグを行うのに役立つツールについてのヒントがあれば、非常に感謝しています。ほとんどの場合、これを絞り込むために console.log を使用しました。

node.js バージョン v0.8.6。Mac OSX バージョン 10.7.5 で実行されます。ありがとう

4

1 に答える 1

2

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

于 2012-11-04T09:00:02.597 に答える