在JavaScript中修改函数参数是一种不好的做法吗?

4

我正在编写一个 Node.js 应用程序。有一些地方需要修改函数参数,例如,这个 Express 中间件添加用户到请求中,以便后续查看:

exports.fetchUserDetails = function (req, res, next) {
  httprequest(opts, function (err, res, body) {
    req.user = body.user;
    next()
  }
}

事情是这样的,我开始使用静态代码分析器(ESLint),它总是抱怨重新分配函数参数(http://eslint.org/docs/rules/no-param-reassign)。我想这个规则是有原因的。
我知道修改函数参数可能是不好的,就像这个例子:
function modifyParam(param) {
  param.a = 2
}

var obj = { a: 1 };
console.log(obj); // outputs { a: 1 };
modifyParam(obj);
console.log(obj); // outputs { a: 2 };

但是我真的看不到重构我的中间件而不重新分配参数的其他方法。

所以我的问题是:

  • 何时可以使用参数重新分配?
  • 如何重构我的中间件以避免这种情况?(或者应该像现在这样保留它)

你为什么认为这个例子不好? - abukaj
2个回答

5
我认为在这种情况下是可以的。您正在设置状态,这些状态将由后续处理请求的函数使用。
语法检查器会抱怨这一点,因为通常很难确定调用函数时是否会修改其参数,从而导致像您在问题中描述的错误。
但在这种情况下,您的函数只有一个调用者——express框架,并且始终清楚您的函数将在哪些情况下被调用,所以我认为这里没有问题。

3
你提供的示例中没有包括重新分配函数参数的内容。
exports.fetchUserDetails = function (req, res, next) {
  httprequest(opts, function (err, res, body) {
    req.user = body.user;
    next()
  }
}

你只是给req引用附加了一个新的字段,但并没有覆盖req本身。
从一开始Express中间件就采用这种方法,这样做没有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接