Основные проблемы с массивами и функциями JavaScript

1
var a=[1,2,3];
var b = a;
a[1]=4;
alert(a);
alert(b);

Я не могу понять, почему массив B равен [1,4,3].

Мой второй вопрос: как я могу выполнить функцию sum (a) (b), поэтому она вернет значение a + b. Например, если сумма вызова (2) (4) вернет 6?

Теги:

4 ответа

6

Причина, по которой B также мутирует, заключается в том, что когда вы назначаете var b = a, вы не копируете массив. В javascript массивы - это объекты и переменные, которые содержат данные объекта, являются просто ссылками на объект. Строка a[1] = 4 изменяет объект, a ссылаются как a и b.

По второму вопросу вы хотите получить sum в карри. Вы можете реализовать его просто как const sum = a => (b => a + b); Тогда sum(a) есть функция b => a + b.

0

В JS var Arr1 = Arr1 не копирует его, он просто помещает ссылку на массив в другую переменную. (см. ответ @Adam Jaffe)

Если вы пытаетесь иметь 2 разных массива, клонируйте первый, нарезав его в исходной позиции.

var a=[1,2,3];
var b = a.slice(0);
a[1]=4;
console.log(a);
console.log(b);
0

var a =[1,2,3];
var b = [];
b = a.concat(b);
a[1]=4;
alert(a);
alert(b); 

function sum(a, b){
	return a + b;
}

var r = sum(2, 4);
console.log(r);
-1
function sum(a,b)
{
  return a+b;
}

var a=[1,2,3];
var b = a.slice(0);
a[1]=4;
alert(a);
alert(b);

var c=sum(2,4);

alert("c=" + c);
  • 0
    Автор попросил функцию, которую он может вызывать следующим образом: sum(a)(b) а не sum(a,b) .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню