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 次迭代中,我开始获取值“1”而不是“2”。不能为我的生活明白为什么。这段代码是我一直在处理的其他代码的缩减,因此在循环中看似不必要的 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 回答