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

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

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 меняется, может кто-нибудь объяснить почему?


Ответы (1 шт):

Автор решения: vsemozhebuty

Вам стоит внимательно прочитать 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; // тут вы вернули новый массив, старый остался неизменным
}
→ Ссылка