这是小提琴: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/