Я пытаюсь передать глобально определенный массив как аргумент функции. Эта функция будет рассматривать аргумент как локальную переменную. Но это не так ... Изменение локальной (по-моему) локальной переменной также изменяет значения глобального массива. Что я делаю не так?Передача глобального массива в функцию overwrites array
clickX = [];
for(var i=0; i<10; i++) {
clickX[i] = i;
}
doThis(clickX);
function doThis(x) {
for(var i=0; i<x.length; i++) {
x[i]++;
alert(clickX[i]); // this alerts the changed value of x[i] and not the origin value of the global array
}
}
jsfiddle: https://jsfiddle.net/n546rq89/
Объекты передаются по ссылке в JS. ('var x = [1,2,3]; var y = x; y.splice (0, 1); console.log (y); // [2, 3]') – tymeJV
Вы не меняете переменная (которая действительно локальна, как вы можете подтвердить с помощью 'x = []'), вы меняете объект (изменяя его свойства). – Bergi
Спасибо, а не понятнее. Как изменить значения объекта в функции без изменения исходного объекта? Как-то дублировать его? – Henning