javascript - 从函数内部操作函数参数是一种好习惯吗?

标签 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/

相关文章:

javascript - 如何将倒计时的目标时间设置为设定时区?

javascript - 常用功能的 Node 事件发射器

javascript - 如何在 angularjs 中设置 $resource 的操作

javascript - 使用windows超时功能时如何加载HTML文件?

javascript - 使用 HTML5 EventSource 将 CZML 流式传输到 Cesium

javascript - 当我的单引号前面有空格时,如何不允许匹配正则表达式?

接受字符串或字符串数​​组的javascript方法

javascript - jquery 'on' 不工作

javascript - 姓名,电子邮件验证

javascript - 动态编辑设置为背景图像的 .svg 文件