从函数中操作函数参数是一种好习惯吗?

时间:2015-06-29 15:19:07

标签: javascript

在良好的JavaScript实践中,从函数内部修改类型引用值(Object)的函数参数是否普遍可以接受(或不赞成)?

我知道它是如何工作的,因为所有函数参数都是通过值传递的,而引用值参数只是指向Object的内存位置的指针。

谢谢!

编辑:我已删除"通过引用"从标题和描述,使措辞更正确,避免混淆读者。正确的答案(和有用的评论)仍然适用

1 个答案:

答案 0 :(得分:3)

你似乎知道不是通过引用传递,所以我无法想象“看待它”会是什么样子。请记住,因为JavaScript中没有pass-by-reference,这意味着您无法从函数中伸出并更改传入其值的变量(而不是它引用的对象)。这不是好事或坏事;这是不可能的。

function foo(a) {
   a  = {"different stuff": "here"};
}
var b = {stuff: "here"};
foo(b);               // `foo`'s assignment to `a` has nothing whatsoever
                      // to do with `b` and has no effect on it
console.log(b.stuff); // "here"

一般来说,通过(通过值)传递给对象的对象引用来修改对象的状态是完全可以接受的,如果这就是你要问的那样:

function foo(a) {
   a.stuff = a.stuff.toUpperCase();
}
var b = {stuff: "here"};
foo(b);
console.log(b.stuff); // "HERE"

这与传递引用没有任何关系。

有一些编程范例,其中一些有时在JavaScript中使用,在那里这样就不行了,你必须克隆并返回一个新对象。这些不是JavaScript中的规范,如果你使用它们,你就会知道。如果不是,那么修改像这样的对象状态是标准做法。