Я экспериментировал с различными типами циклов в JS и столкнулся с очень странным поведением.
Пример с этой страницы работает просто отлично.Но этот код
var N = 10
var i = N
do {
console.log(i)
if (i == N) i-=3
else i+=2
} while (i < N)
печатает 10, 7, 9, 11 вместо 10, 7, 9, как ожидается, как в Chrome 45, так и в Firefox 47. Это действительно очень странно.Я преобразовал этот цикл в язык C и запустил его с помощью этого онлайн-инструмента , и он работал правильно.Почему поведение в JS отличается от C (и также не соответствует)?Мне кажется, что в моем сценарии интерпретатор сохраняет значения переменных в начале каждой итерации и использует кэшированные значения в конце итерации вместо фактических.Действительно ли он определен в стандарте таким образом?
Кстати, если я запускаю этот код как фрагмент с помощью онлайн-интерпретатора JS, он работает нормально.