传递后是否可以覆盖对象?

时间:2016-06-04 10:37:01

标签: javascript pass-by-reference

请参阅以下示例:



var foo = { bar : 0 };

function modify(obj)
{
    obj = {};
}

modify(foo);

console.log(foo);




我在全球范围内的第一个对象保持不变。因为该函数没有替换对象而是替换引用的副本。

所以我的问题很简单。有没有人知道一种解决方法,或者当前开发中是否有ECMAScript功能,或者有没有尝试使其成为可能?

感谢。

1 个答案:

答案 0 :(得分:1)

您无法更改调用的变量的绑定。但是,由于您收到对同一对象的引用,因此您可以修改对象本身。所以你可以删除所有属性:

function modify(obj) {
  Object.keys(obj).forEach(function(k) {
    delete obj[k];
  });
}

var foo = { a: 3 };
console.log(foo);
modify(foo);
console.log(foo);