Javascript (nodejs), в то время как ошибка цикла

запускает следующий код в 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. Благодаря

Ответ 1

Если вы выберете утверждение IF, все будет хорошо, он вернет только "2" на каждой итерации. Переменная prev_difference - "undefined" каждый раз, и это, по-видимому, вызывает проблемы.