javascript - 为什么我的私有(private)变量被改变了?

标签 javascript variables methods private

这是 fiddle :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是对私有(private)数组的引用v,您对其内容所做的任何更改将来仍然可见。

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

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

相关文章:

javascript - 当 reducer 为空时,Store 没有有效的 reducer

javascript - 在对象中使用变量作为引用水平

python - 无法使用 'where' 和变量删除 SQLite 行

c - 函数指针与全局变量

python - 如何在不编辑原始模块的情况下从第三方 Python 模块向类添加方法

c# - 这是使用泛型方法的好方法吗?

c# - 不在接口(interface)中的类方法

c# - 如何从 C# 方法返回 JavaScript 'native' 数组?

javascript - $q.allPromises 返回一个数组,但我只想要一个元素,而不是全部

javascript - 如何使用 jQuery 动态地在主页中的外部页面之间建立链接?