Что не так с циклом do .. while в JavaScript? - PullRequest
0 голосов
/ 13 октября 2018

Я экспериментировал с различными типами циклов в 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, он работает нормально.

1 Ответ

0 голосов
/ 13 октября 2018

Ой, прости, я понял.11 - это возвращаемое значение всего кода.Хотя я не понимаю, почему это именно 11, а не результат 11 <10 (например, ложь), например.Может быть, так и должно быть. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...