在良好的 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"
Run Code Online (Sandbox Code Playgroud)
通常,如果您要问的是,通过(按值)传递给函数的对象引用来修改对象的状态是完全可以接受的:
function foo(a) {
a.stuff = a.stuff.toUpperCase();
}
var b = {stuff: "here"};
foo(b);
console.log(b.stuff); // "HERE"
Run Code Online (Sandbox Code Playgroud)
这与传递引用完全没有关系。
有一些编程范式,其中一些有时会在 JavaScript 中使用,在这种情况下,这是不行的,您必须克隆并返回一个新对象。这些不是JavaScript 中的规范,如果您使用它们,您就会知道。如果不是,那么像这样修改对象状态是标准做法。
| 归档时间: |
|
| 查看次数: |
2111 次 |
| 最近记录: |