版本

no-param-reassign

不允許重新賦值 function 參數

對宣告為函式參數的變數賦值可能會產生誤導,並導致混淆的行為,因為當不處於嚴格模式時,修改函式參數也會修改 arguments 物件(請參閱下方的何時不該使用它)。通常,對函式參數賦值是無意的,並表示錯誤或程式設計師的疏失。

此規則也可以設定為在修改函式參數時失敗。參數上的副作用可能會導致違反直覺的執行流程,並使錯誤難以追蹤。

規則詳情

此規則旨在防止因修改或重新賦值函式參數而導致的意外行為。

此規則的錯誤程式碼範例

在遊樂場開啟
/*eslint no-param-reassign: "error"*/

var foo = function(bar) {
    bar = 13;
}

var foo = function(bar) {
    bar++;
}

var foo = function(bar) {
    for (bar in baz) {}
}

var foo = function(bar) {
    for (bar of baz) {}
}

此規則的正確程式碼範例

在遊樂場開啟
/*eslint no-param-reassign: "error"*/

var foo = function(bar) {
    var baz = bar;
}

選項

此規則接受一個選項,即一個物件,其中包含布林值屬性 "props",以及陣列 "ignorePropertyModificationsFor""ignorePropertyModificationsForRegex""props" 的預設值為 false。如果 "props" 設定為 true,則此規則會警告對參數屬性的修改,除非它們包含在 "ignorePropertyModificationsFor""ignorePropertyModificationsForRegex" 中,後者預設為空陣列。

props

預設 { "props": false } 選項的正確程式碼範例

在遊樂場開啟
/*eslint no-param-reassign: ["error", { "props": false }]*/

var foo = function(bar) {
    bar.prop = "value";
}

var foo = function(bar) {
    delete bar.aaa;
}

var foo = function(bar) {
    bar.aaa++;
}

var foo = function(bar) {
    for (bar.aaa in baz) {}
}

var foo = function(bar) {
    for (bar.aaa of baz) {}
}

{ "props": true } 選項的錯誤程式碼範例

在遊樂場開啟
/*eslint no-param-reassign: ["error", { "props": true }]*/

var foo = function(bar) {
    bar.prop = "value";
}

var foo = function(bar) {
    delete bar.aaa;
}

var foo = function(bar) {
    bar.aaa++;
}

var foo = function(bar) {
    for (bar.aaa in baz) {}
}

var foo = function(bar) {
    for (bar.aaa of baz) {}
}

設定 "ignorePropertyModificationsFor"{ "props": true } 選項的正確程式碼範例

在遊樂場開啟
/*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsFor": ["bar"] }]*/

var foo = function(bar) {
    bar.prop = "value";
}

var foo = function(bar) {
    delete bar.aaa;
}

var foo = function(bar) {
    bar.aaa++;
}

var foo = function(bar) {
    for (bar.aaa in baz) {}
}

var foo = function(bar) {
    for (bar.aaa of baz) {}
}

設定 "ignorePropertyModificationsForRegex"{ "props": true } 選項的正確程式碼範例

在遊樂場開啟
/*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsForRegex": ["^bar"] }]*/

var foo = function(barVar) {
    barVar.prop = "value";
}

var foo = function(barrito) {
    delete barrito.aaa;
}

var foo = function(bar_) {
    bar_.aaa++;
}

var foo = function(barBaz) {
    for (barBaz.aaa in baz) {}
}

var foo = function(barBaz) {
    for (barBaz.aaa of baz) {}
}

何時不該使用它

如果您想允許對函式參數賦值,則可以安全地停用此規則。

嚴格模式程式碼不會將 arguments 物件的索引與每個參數綁定同步。因此,此規則對於保護 ESM 模組或其他嚴格模式函式中 arguments 物件的變更並非必要。

版本

此規則於 ESLint v0.18.0 中引入。

延伸閱讀

資源

變更語言