В чем разница между i++ и ++i?
Продвинутые темы
`i++` (постфиксный) и `++i` (префиксный) оба увеличивают переменную на 1, но различаются возвращаемым значением: `i++` возвращает старое значение, `++i` — новое.
Различие в возвращаемом значении
i++ (постинкремент)
Возвращает значение до увеличения, затем увеличивает:
let i = 5;
let a = i++; // a = 5 (старое), i = 6++i (преинкремент)
Увеличивает, затем возвращает новое значение:
let i = 5;
let b = ++i; // b = 6 (новое), i = 6Наглядно
let x = 1;
console.log(x++); // 1 (выводит старое, потом x = 2)
console.log(x); // 2
let y = 1;
console.log(++y); // 2 (сначала увеличивает, выводит новое)
console.log(y); // 2Когда это важно
- Само значение переменной после операции одинаково (оба +1).
- Разница проявляется только когда используется возвращаемое значение (в присваивании, выражении, аргументе).
const arr = [];
let i = 0;
arr[i++] = 'a'; // положит в arr[0], i станет 1В обычном цикле
В for (let i = 0; i < n; i++) результат i++ не используется, поэтому i++ и ++i эквивалентны (микрооптимизация ++i незначима в JS).
Коротко для собеседования
i++ возвращает старое значение, потом увеличивает; ++i увеличивает, потом возвращает новое. Сама переменная в обоих случаях +1 — разница важна только когда используется возвращаемое значение (в выражении). В обычном for эквивалентны.