Страницы

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

понедельник, 24 февраля 2020 г.

Инкремент в javascript

#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);

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

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