簡體   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