В javascript е функция не меняет переменную

121
16 апреля 2022, 21:20

Здравствуйте есть две функции

function reverseArrayPlace(array) {
  let newArray = array;
  array = [];
  let b = 0;
  for (let a = newArray.length - 1; a >= 0; a--) {
    array[b] = (newArray[a]);
    b++;
    console.log(array);
  }
  return array;
}
function reverseArrayInPlace(array) {
  for (let i = 0; i < Math.floor(array.length / 2); i++) {
    let old = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = old;
  }
  return array;
}

При вызове reverseArrayPlace допустим let ar=["a","b","c"]; массив ar остается таким же. А при вызове reverseArrayInPlace(ar) ar меняется, может кто-нибудь объяснить почему?

Answer 1

Вам стоит внимательно прочитать https://learn.javascript.ru/object-copy

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

function reverseArrayPlace(array) {
  // тут вы присвоили переданный массив новой переменной, из которой  будете только читать
  let newArray = array;
  array = []; // теперь array содержит новый пустой массив, его вы и меняете
  let b = 0;
  // тут вы просто читаете длину старого массива, но никак его не меняете
  for (let a = newArray.length - 1; a >= 0; a--) { 
    array[b] = (newArray[a]); // все записи происходят в новый, из старого только чтение
    b++;
    console.log(array);
  }
  return array; // тут вы вернули новый массив, старый остался неизменным
}
READ ALSO
Почему не работает делегирование?

Почему не работает делегирование?

Изучаю тему по учебникуВ нем есть пример, который работает в сэндбоксе

136
Где хранить service worker?

Где хранить service worker?

Загорелся идеей добавить service worker при помощи workbox в существующий проект на WordPress, но столкнулся с одной проблемой: где его расположить и как...

113
Ошибка при подключении бд

Ошибка при подключении бд

При подключении к бд выдаёт ошибку "ER_ACCESS_DENIED_ERROR: Access denied for user 'gallium_quasar'@'ip-200-111-142-5pools

105