有人可以在下面的代码中解释我,为什么当我做o= {}时,对象没有被重置?
var funky = function (o) {
o.z = null;
o.a = "aaa";
o = {};
};
var x = { z: "zzz"};
funky(x);
console.log(x);发布于 2013-03-14 23:07:33
因为JavaScript不是通过引用传递的。它通过值传递引用。
区别是细微的,但却很重要。它的要点是,对象变量的值不是对象;它是对对象的引用。传递一个变量会传递该引用的一个副本。有了它,你几乎可以随意修改对象的内容,但你不能以调用者可以看到的方式用一个完整的其他对象替换它。
发布于 2013-03-14 23:09:30
o只是它当前指向的东西的别名,它不是实例(通过值传递)。
如果你想模仿“通过引用传递”,你可以这样做:
var x = { ... };
var container = { x: x };
funky(container);现在您可以在funky()中重置它
container.x = {};https://stackoverflow.com/questions/15412909
复制相似问题