<分区>
在良好的 JavaScript 实践中,从函数内部修改类型为引用值 (Object) 的函数参数是否通常可以接受(或不赞成)?
我知道它是如何工作的,因为所有函数参数都是按值传递的,而引用值参数只是指向对象内存位置的指针。
谢谢!
编辑:我从标题和描述中删除了“通过引用传递”,以使措辞更加正确并避免读者混淆。正确答案(和有用的评论)仍然适用
标签 javascript
<分区>
在良好的 JavaScript 实践中,从函数内部修改类型为引用值 (Object) 的函数参数是否通常可以接受(或不赞成)?
我知道它是如何工作的,因为所有函数参数都是按值传递的,而引用值参数只是指向对象内存位置的指针。
谢谢!
编辑:我从标题和描述中删除了“通过引用传递”,以使措辞更加正确并避免读者混淆。正确答案(和有用的评论)仍然适用
最佳答案
您似乎知道它不是通过引用传递,所以我无法想象“对待它”会是什么样子。请记住,因为 JavaScript 中没有按引用传递,这意味着您无法从函数中伸出手来更改传入值的变量(不是它引用的对象)。这既不是好事也不是坏事。这是不可能的。
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 中的规范,如果您正在使用它们,您就会知道。如果您不是,那么像这样修改对象状态是标准做法。
关于javascript - 从函数内部操作函数参数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31119439/