Ошибка изменения элемента массива в JavaScript

Давайте рассмотрим ошибку, возникающую при неправильном изменении элемента массива. Пусть у нас дан вот такой массив:

let arr = [1, 2, 3, 4, 5];

Пусть у нас также есть функция, которая параметром принимает число и возвращает квадрат этого числа:

function func(num) { return num ** 2; }

Давайте с помощью цикла for-of переберем наш массив и к каждому из его элементов применим нашу функцию:

for (let elem of arr) { elem = func(elem); }

В этом месте начинающие часто допускают ошибку. Дело в том, что изменение переменной elem не приводит к изменению элемента в самом массиве. Убедимся в этом:

console.log(arr); // массив не изменился

Массив не изменяется из-за того, что в переменной elem хранится копия элемента, а не ссылка на него. Изменение elem влияет на копию, но не на сам массив.

Для решения проблемы нужно изменять именно элементы массива:

for (let i = 0; i < arr.length; i++) { arr[i] = func(arr[i]); } console.log(arr); // теперь массив изменился