no-param-reassign
不允許重新賦值 function
參數
對宣告為函式參數的變數賦值可能會產生誤導,並導致混淆的行為,因為當不處於嚴格模式時,修改函式參數也會修改 arguments
物件(請參閱下方的何時不該使用它)。通常,對函式參數賦值是無意的,並表示錯誤或程式設計師的疏失。
此規則也可以設定為在修改函式參數時失敗。參數上的副作用可能會導致違反直覺的執行流程,並使錯誤難以追蹤。
規則詳情
此規則旨在防止因修改或重新賦值函式參數而導致的意外行為。
此規則的錯誤程式碼範例
/*eslint no-param-reassign: "error"*/
var foo = function(bar) {
= 13;
}
var foo = function(bar) {
++;
}
var foo = function(bar) {
for ( in baz) {}
}
var foo = function(bar) {
for ( 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) {
.prop = "value";
}
var foo = function(bar) {
delete .aaa;
}
var foo = function(bar) {
.aaa++;
}
var foo = function(bar) {
for (.aaa in baz) {}
}
var foo = function(bar) {
for (.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 中引入。