Javascript:通过引用传递

时间:2013-03-14 15:06:47

标签: javascript pass-by-reference

有人可以在下面的代码中解释我,为什么当我做o = {}时,对象没有被重置?

var funky = function (o) {
    o.z = null;
    o.a = "aaa";        
    o = {};
};

var x = { z: "zzz"};
funky(x);

console.log(x);

2 个答案:

答案 0 :(得分:7)

因为JavaScript没有通过引用传递。它按值传递引用。

差异很微妙,但很重要。它的要点是,对象变量的值不是对象;它是对象的引用。传递变量会传递该引用的副本。有了它,您可以随意修改对象的内容,但不能以调用者可以看到的方式将其替换为整个其他对象。

答案 1 :(得分:2)

o只是它当前指向的任何别名,它不是实例(按值传递)。

如果您想模仿“通过引用传递”,您可以这样做:

var x = { ... };
var container = { x: x };
funky(container);

现在您可以在funky()中重置它:

container.x = {};