Страницы

Поиск по вопросам

четверг, 2 мая 2019 г.

Инкремент в javascript

'use strict'; var years = prompt('Сколько вам лет?', 100); years = years++; alert('Вам ' + years + ' лет!');
Почему после выражения years = years++; переменная years не увеличивается на единицу, а остается равной 100?
Я понимаю, что выражение не корректное, но меня интересует механизм языка в данном случае. По идее, переменной years должно было сначала присвоиться ее же старое значение, то есть 100, а затем эта же переменная должна была увеличиться на 1 инкрементом. Но alert выводит все равно 100. Почему так?


Ответ

years = years++ эквивалентно:
tmp = years; years++; years = tmp;
В отличие от years = ++years;, как справедливо отметил @Doofy. Постфиксный инкремент возвращает значение переменной ДО увеличения на 1, префиксный - значение после.
Насколько я знаю, инкремент работает именно так во всех ЯП, в которых он есть. Поэтому, кстати, в циклах предпочтительно использовать префиксный инкремент при прочих равных - меньше накладных расходов.
Например i++ выведет 0-1-2-3-4, а не 1-2-3-4-5
for (i=0; i<5;) console.log(i++);
for (i=0; i<5;) console.log(++i);

Комментариев нет:

Отправить комментарий