我知道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);
哪一个更好,为什么?
答案 0 :(得分:2)
如果函数返回传入的值,则确实没有意义 - 外部变量的值" obj"在任何情况下都不能通过该功能进行更改。
说JavaScript中的任何内容都是通过引用"传递的,这是不完全正确的。对象"值" 总是引用,参数传递也不例外。 JavaScript是一种严格的按值传递的语言;只是恰好引用对象的值才是对象的引用。所以你在问题的开头所说的是正确的:对象的引用副本被传递给函数。参数传递的主题是一个简单但复杂的主题,并且复杂并不是因为单词" reference"出现在技术语言理论中#34;术语"传递参考"。
现在,在某种情况下,由于某种原因,您的函数可能会决定需要创建一个 new 对象,然后返回一个对象可能会有意义。