Использование массива в функции JavaScript

118
18 декабря 2019, 16:30

В представленном ниже коде, в моём, вероятно не самом толковом понимании функция получает массив "arr" в аргумент "list", должна его отсортировать и вернуть отсортированный массив в переменную arrSorted. И при всём, при этом, изначальный, глобальный массив вроде как тоже должен оставаться без изменений, ведь все действия производимые с ним были внутри тела функции, но на деле, по итогу выполнения кода и arr, и arrSorted становятся отсортированными.

var arr = ["HTML", "JavaScript", "CSS"]; 
var arrSorted = sortFunc(arr); 
 
function sortFunc(list){ 
  return list.sort(); 
} 
 
console.log( arrSorted ); // CSS, HTML, JavaScript 
console.log( arr ); // CSS, HTML, JavaScript 

Answer 1

Чтоб было совсем понятно, что это не копия массива, добавил элемент

var arr = [ "HTML", "JavaScript", "CSS" ]; 
// Здесь вы просто получили ссылку на arr 
var arrSorted = sortFunc( arr ); 
 
function sortFunc ( list ) { 
    return list.sort(); 
} 
 
// +++ Добавлено 
arrSorted.push( "PHP" ); 
 
console.log( arrSorted ); // [ 'CSS', 'HTML', 'JavaScript', 'PHP' ] 
console.log( arr ); // [ 'CSS', 'HTML', 'JavaScript', 'PHP' ]

Answer 2

Как я написал в комментарии Вы и сортируете исходный массив, а затем возвращаете его из функции.

Чтобы этого избежать создавайте копию:

let newArr = arr.slice(0)
var arr = ["HTML", "JavaScript", "CSS"];
var arrSorted = sortFunc(arr.slice(0));
function sortFunc(list){
  return list.sort();
}
console.log( arrSorted ); // CSS, HTML, JavaScript
console.log( arr ); // CSS, HTML, JavaScript 
READ ALSO
Проверить поддержку события в JavaScript

Проверить поддержку события в JavaScript

Возникла такая задача, проверить существование или поддержку события в разных браузерах

132
Функция для изменения окончания слов в зависимости от числа в Javascript [закрыт]

Функция для изменения окончания слов в зависимости от числа в Javascript [закрыт]

Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском

141
JS - запись/захват системного звука

JS - запись/захват системного звука

Современные браузеры позволяют давать доступ, и соответственно вести запись:

137