在JavaScript中修改函数参数是一种不好的做法吗
我正在编写一个Node.js应用程序。有些地方我必须修改函数的参数。例如,此Express中间件用于将用户添加到请求,以便我以后可以查看:在JavaScript中修改函数参数是一种不好的做法吗,javascript,node.js,parameter-passing,eslint,Javascript,Node.js,Parameter Passing,Eslint,我正在编写一个Node.js应用程序。有些地方我必须修改函数的参数。例如,此Express中间件用于将用户添加到请求,以便我以后可以查看: exports.fetchUserDetails = function (req, res, next) { httprequest(opts, function (err, res, body) { req.user = body.user; next() } } 问题是,我开始使用静态代码分析器(ESLint),它总是抱怨重新分
exports.fetchUserDetails = function (req, res, next) {
httprequest(opts, function (err, res, body) {
req.user = body.user;
next()
}
}
问题是,我开始使用静态代码分析器(ESLint),它总是抱怨重新分配函数参数()。我想这条规则是有原因的
我知道修改函数参数可能不好,如本例所示:
function modifyParam(param) {
param.a = 2
}
var obj = { a: 1 };
console.log(obj); // outputs { a: 1 };
modifyParam(obj);
console.log(obj); // outputs { a: 2 };
但我真的不知道重构中间件而不重新分配参数的其他方法
所以我的问题是:
- 何时可以使用参数重新分配
- 如何重构中间件以避免这种情况?(或者我应该保持原样)
- 我想在这种情况下没关系。您正在设置处理请求的后续函数将使用的状态
linters对此抱怨的原因是,调用函数时往往不清楚它是否会修改其参数,从而导致错误,正如您在问题中所述
但在本例中,您的函数只有一个调用者,即express框架,在什么情况下调用您的函数总是很清楚的,所以我认为这不是一个问题。您提供的示例不包括重新分配函数参数
exports.fetchUserDetails = function (req, res, next) {
httprequest(opts, function (err, res, body) {
req.user = body.user;
next()
}
}
您只需将新字段附加到req
引用,但不覆盖req
本身
Express中间件从一开始就使用这种方法,这没有什么不对。
为什么你认为这个例子不好?