Ответ 1
Если вы выберете утверждение IF, все будет хорошо, он вернет только "2" на каждой итерации. Переменная prev_difference - "undefined" каждый раз, и это, по-видимому, вызывает проблемы.
запускает следующий код в 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. Благодаря
Если вы выберете утверждение IF, все будет хорошо, он вернет только "2" на каждой итерации. Переменная prev_difference - "undefined" каждый раз, и это, по-видимому, вызывает проблемы.