Javascript 从函数内部操纵函数参数是否是一种良好的做法?

Javascript 从函数内部操纵函数参数是否是一种良好的做法?,javascript,Javascript,在良好的JavaScript实践中,从函数内部修改类型为reference value(Object)的函数参数是否通常可以接受(或不赞成) 我知道它是如何工作的,因为所有函数参数都是通过值传递的,而引用值参数只是指向对象内存位置的指针 谢谢大家! 编辑:我从标题和描述中删除了“参考传递”,以使措辞更加正确,避免读者混淆。正确的答案(和有用的评论)仍然适用您似乎知道它不是通过引用传递的,所以我无法想象像对待它那样对待它会是什么样子。请记住,因为JavaScript中没有传递引用,这意味着您无法从

在良好的JavaScript实践中,从函数内部修改类型为reference value(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中的标准,如果您正在使用它们,您就会知道。如果您不这样做,那么修改对象状态是标准做法。

在任何情况下,操纵对象的内容都是一件非常好的事情,前提是您的系统架构符合这一点。”一般来说,通过传递的对象引用(按值)修改对象的状态是完全可以接受的在函数中,如果这是您要问的:“是的,这是更好的措辞,忘记传递引用:)那么,在实践中,这是一种可以接受的技术吗?@Dave:除非您使用JavaScript作为核心,否则是的。绝大多数人没有。不过,有一个更大的“JavaScript中的函数式编程”社区,比我在其他没有设计成函数式的语言(例如Haskell)中看到的还要大。从百分比上看,这并不重要,但它们仍然存在,但同样,如果您使用函数式编程,您就会知道。:-)还感谢您澄清JavaScript中只有传递值。哈哈,是的,肯定没有功能,但我用一种不太常见的方式编写JavaScript。它是一个关键字驱动的自动化测试框架,使用Sahi Pro允许我们的QA团队编写自动化测试。在编写框架的同时,我正在阅读两本书,分别是《面向Web开发人员的专业JavaScript》和《JavaScript:the Good Parts what has before great reads》。@Dave:关于第二本书,请注意一点。克罗克福德是一个聪明、消息灵通的人,但在他的写作中,他有时无法区分自己的观点和事实。例如,关于构造函数的好部分(他不喜欢)的继承部分中有一些明显错误的信息。只要你记住这一点,这本书很值得一读。:-)另外,我要指出的是,自从写了那本书以来,他朝着一个更实用的方向发展,所以如果你读了他最近的一些作品,你就会看到这种影响。最好的,