繁体   English   中英

在JavaScript中修改函数参数是否是错误的做法

[英]Is it a bad practice to modify function arguments in JavaScript

我正在编写一个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 };

但是我真的没有看到无需重新分配参数即可重构中间件的另一种方法。

所以我的问题是:

  • 什么时候可以使用参数重新分配?
  • 如何重构中间件以避免这种情况? (或者我应该保留原样)

我认为在这种情况下就可以了。 您正在设置状态,该状态将由处理请求的后续功能使用。

linters对此抱怨的原因是,调用函数时通常不清楚,因为它将修改其参数,从而导致错误,如您在问题中所述。

但是在这种情况下,您的函数只有一个调用方,即express框架,并且始终很清楚在哪种情况下会调用您的函数,因此在这里我认为这不是问题。

您提供的示例不包括重新分配函数参数。

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

您只需将新字段附加到req引用,但不覆盖req本身。

Express中间件从一开始就使用这种方法,这没有错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM