循环bug时javascript(nodejs)

use*_*466 11 javascript node.js

在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()) }
Run Code Online (Sandbox Code Playgroud)

在循环的迭代282,我开始得到值'1'而不是'2'.不能为我的生活理解为什么.这段代码是我一直在努力的其他东西的减少,因此在循环中看似不必要的if语句.有几种方法可以改变这些代码,使得执行路径不会搞砸,但我想了解为什么它会破坏当前的设置.

另外,如果你有任何工具提示可以帮助我将来调试这样的东西,我将非常感激.在大多数情况下,我使用console.log来缩小范围.

node.js版本v0.8.6.在Mac OSX版本10.7.5上运行.谢谢

小智 2

如果你去掉 IF 语句,那就没问题了,每次迭代它只会返回“2”。变量 prev_difference 每次都是“未定义”,这似乎会引起问题。