Оператор Postfix в JavaScript

Я думаю, что это базовый вопрос JS, но я просто не смог найти ответ, который меня удовлетворил бы. Я изучаю операторы в JavaScript, и я не могу понять этот следующий пример постфикса и то, как он работает:

var x = 4;
var y = x++;

Например, когда я предупреждаю x, он дает мне 5. Но когда я предупреждаю y, он дает мне 4. И я не могу понять логику этого. Я понимаю, что, поскольку это постфикс, x присваивается y. А y читает только x без постфикса. Но почему тогда исходный x вместо этого читает постфикс, если я применяю его к другому var?

Если бы я просто сделал var y = x + 1, исходный x остался бы без изменений. Но это не тот случай, когда я использую postfix. Зачем мне вообще менять x этим методом? Могу я просто пойти тогда var x = 4; x++;? И не заморачиваться через другой вар?

Прошу прощения, если это слишком просто, и заранее спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
949
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Why would I even change the x with this method?

Для забавных сокращений вроде:

const array = [1, 2, 3];
let i = 0;
while(i < array.length) console.info(array[ i++ ]);

Couldn't I just go then var x = 4; x++; ?

Да, или просто префикс, например ++x или просто x += 1, что в большинстве случаев более уместно.

Ответ принят как подходящий

Легче представить операторы приращения как небольшие функции, которые что-то возвращают. Итак, x++ - это функция, которая увеличивает x и возвращает исходное значение x, тогда как ++x делает то же самое, но возвращает новое значение.

Время от времени это бывает полезно, особенно в петлях, где требуется точный контроль точки остановки. Например, сравните:

let i = 0, j = 0;

while (++i < 5) {
    console.info(i) // stops at 4
}

while (j++ < 5) {
    console.info(j) // stops at 5
}

Разница в том, что цикл while вычисляет одно перед приращением, а другое - после.

Точно так же в рекурсивных функциях вы часто увидите такие вещи, как:

function recurse(i) {
    if (i == 5) return i
    console.info(i)
    return recurse(++i)
}
console.info("final: ", recurse(0))

Но если вы используете постфикс return recurse(i++), вы получите бесконечную рекурсию.

Другие вопросы по теме