У меня есть этот кусок кода:Как убедиться, что переменная не передается по ссылке
var A = [1,2,3];
function calculatePartialSum(A, i) {
A.splice(0,i);
console.log('calculating sum for ', A);
return A.reduce(add, 0);
}
var add = function(a, b) {
return a + b;
}
var test = function(A) {
var sums = [];
for (var i=0; i < A.length ; i++) {
console.log('calling calculate sum for i = ', i, A);
sums.push(calculatePartialSum(A, i));
}
return sums;
}
console.log(test(A));
Как вы можете видеть, цикл выполняется два раза, потому что сращивания изменения массива A
. То, чего я не понимаю, это то, почему он ссылается на A за пределами области функции.
1-й вопрос: не должен calculateSum
иметь свой собственный объем, а не ссылку A
, который определен за пределами его объема?
2d Вопрос: Признание Я не понимаю, как это возможно, что является изящным решением в javascript, который не использует взломать (по соображениям производительности), не внешние библиотеки?
Почему бы не просто скопировать его? –
1) Имя 'calculateSum' вводит в заблуждение: можно было бы ожидать, что эта функция рассчитает сумму от 0 до' i' исключенных, я думаю. 2) Что не так в написании хорошего старого 'for'loop в таком случае ??? – GameAlchemist
[JS не имеет «пройти по ссылке»] (http://whatsthepointy.blogspot.com.es/2013/11/javascript-does-not-have-pass-by.html). Это всегда «передать по значению», но в случае объектов это значение является ссылкой. – Oriol