#javascript
'use strict'; var years = prompt('Сколько вам лет?', 100); years = years++; alert('Вам ' + years + ' лет!'); Почему после выражения years = years++; переменная years не увеличивается на единицу, а остается равной 100? Я понимаю, что выражение не корректное, но меня интересует механизм языка в данном случае. По идее, переменной years должно было сначала присвоиться ее же старое значение, то есть 100, а затем эта же переменная должна была увеличиться на 1 инкрементом. Но alert выводит все равно 100. Почему так?
Ответы
Ответ 1
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);
Комментариев нет:
Отправить комментарий