Javascript 如何确保变量不是通过引用传递的

Javascript 如何确保变量不是通过引用传递的,javascript,scope,pass-by-reference,Javascript,Scope,Pass By Reference,我有一段代码: 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;

我有一段代码:

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));
var A=[1,2,3];
函数计算部分(A,i){
A.拼接(0,i);
console.log('A'的计算总和);
返回A.reduce(添加,0);
}
var add=函数(a,b){
返回a+b;
}
var测试=功能(A){
var总和=[];
对于(变量i=0;i

你可以用许多方法复制一个
数组
,看看哪个方法更快

var myArray = [1,2,3];
var myClone = clone( myArray );

function clone ( toClone ) {
    a = [];

    for ( i = toClone.length; i--; ) {
        a.push( toClone[i] );
    }

    return a;
}
迭代似乎是最快的,但请注意,如果数组中的元素是
对象
,则不会复制,而是引用

var myArray = [{},{},{}];
var myClone = clone( myArray );
myClone[0].foo = 'bar';
console.log( myArray[0].foo ); // 'bar'

为什么不简单地复制它呢?1)名称
calculateSum
有误导性:我想这个函数可以计算从0到
i
的总和。2) 在这种情况下,为
循环编写一个好的
,有什么不对???。它始终是“按值传递”,但对于对象,该值是一个参考值。这里有这么多好的答案-我希望它们都是正确的。@gamealchest是的,这是误导。我将其重命名为CalculatePartialSum为什么不简单地复制它呢?1)名称
calculateSum
具有误导性:我想,人们会期望此函数计算从0到
I
的总和。2) 在这种情况下,为
循环编写一个好的
,有什么不对???。它始终是“按值传递”,但对于对象,该值是一个参考值。这里有这么多好的答案-我希望它们都是正确的。@gamealchest是的,这是误导。我将其重命名为CalculatePartialSumarray,使其不通过引用传递。它们是按值传递的,但该值是一个引用。没错,这样更容易理解,但我会编辑它。数组不是按引用传递的。它们是按值传递的,但该值是一个引用。你是对的,它只是eas