Javascript - 返回通过引用传递的修改对象

时间:2014-07-17 22:13:16

标签: javascript pass-by-reference

我知道Javascript的对象是通过对函数的引用的副本传递的。

从这个意义上说,如果我有一个修改对象的函数,我应该返回对象并覆盖原始对象吗?

即,这个

function inc(obj)
{
    obj.count++;
}

obj = {count : 0, topic : 'Something'};
inc(obj);

vs this:

function inc(obj)
{
    obj.count++;
    return obj;
}

obj = {count : 0, topic : 'Something'};
obj = inc(obj);

哪一个更好,为什么?

1 个答案:

答案 0 :(得分:2)

如果函数返回传入的值,则确实没有意义 - 外部变量的值" obj"在任何情况下都不能通过该功能进行更改。

说JavaScript中的任何内容都是通过引用"传递的,这是不完全正确的。对象"值" 总是引用,参数传递也不例外。 JavaScript是一种严格的按值传递的语言;只是恰好引用对象的值才是对象的引用。所以你在问题的开头所说的是正确的:对象的引用副本被传递给函数。参数传递的主题是一个简单但复杂的主题,并且复杂并不是因为单词" reference"出现在技术语言理论中#34;术语"传递参考"。

现在,在某种情况下,由于某种原因,您的函数可能会决定需要创建一个 new 对象,然后返回一个对象可能会有意义。