这是小提琴:http://jsfiddle.net/Xh4GU/1
或代码:

function Vector()
{
    var v = new Array(123, 456, 789);

    this.getV = function()
    {
        return v;
    }
}

function Formulas()
{
    this.add = function(x, axis, units)
    {
        x[axis] += units;
    }
}

var vector = new Vector();
var formulas = new Formulas();

var v = vector.getV();
var vAdded = formulas.add(v, 0, 77)

document.write(v);


吐出:200,456,789

为什么v的第一个索引被更改?
谢谢

最佳答案

由于数组是通过引用传递给formulas.add的,因此传递给formulas.add的参数是对私有数组v的引用,因此您对其内容所做的任何更改将来都将保持可见。

当您将对v的引用分发给外部代码时,v是私有的事实并不能保护其内容。它的确防止了外部代码自己获取v并与另一个数组交换v,但是可以修改数组本身(更改其值)。

关于javascript - 为什么要更改我的私有(private)变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12886839/

10-09 22:29