Почему функция изменяет массив, что в нее передается?

247
28 марта 2018, 07:27
    function rotr(arrToRotr1, howRot) {
  if (howRot > arrToRotr1.length) {return console.log('Ошибка, количество здвигов вправо больше длины масива');}
  let resArr = arrToRotr1;
  for (var i=0;i<howRot;i++) {
    resArr.unshift(resArr.pop());
  }
  return resArr;
}
var allchars = ['a', 'b', 'c', 'd'];//
console.log(allchars);//['a', 'b', 'c', 'd']
var rot22 = rotr(allchars, 1);
console.log(rot22);//[ 'c', 'd', 'a', 'b' ]
console.log(allchars);//[ 'c', 'd', 'a', 'b' ]

функция rotr - циклический сдвиг вправо элементов массива, почему она изменяет массив allchars, что в нее передается?

Answer 1

Массив - ссылочный тип. После этой строчки

let resArr = arrToRotr1;

обе переменные, resArr и arrToRotr1, ссылаются на один и тот же массив.

upd: почитать можно тут http://learn.javascript.ru/array

Update

let resArr = arrToRotr1.slice(); // resArr - новый массив с теми же элементами
READ ALSO
Помогите исправить Javascript код

Помогите исправить Javascript код

Есть код, который при уменьшении размера экрана до 800 пиксвыводит после заголовка дополнительный код:

198