Eslint
规则 | Rules

no-param-reassign

禁止重新分配函数参数(no-param-reassign)

赋值给声明为函数参数的变量可能会引起误解,并导致混淆行为,因为修改函数参数也会使arguments对象变异。通常,对函数参数的赋值是意想不到的,并且指示错误或程序员错误。

当修改功能参数时,也可以将此规则配置为失败。对参数的副作用会导致违反直觉的执行流程,并使错误难以追踪。

规则细节

这个规则旨在防止由功能参数的修改或重新分配引起的意外行为。

规则的错误代码示例:

/*eslint no-param-reassign: "error"*/ function foo(bar) { bar = 13; } function foo(bar) { bar++; }

规则的正确代码示例:

/*eslint no-param-reassign: "error"*/ function foo(bar) { var baz = bar; }

选项

规则采用一个选项,一个对象,一个布尔属性"props"和一个数组"ignorePropertyModificationsFor""props"false默认的。如果"props"设置为true,则此规则会警告修改参数属性,除非它们包含"ignorePropertyModificationsFor"在内,默认情况下这是一个空数组。

props

{ "props": false }默认选项的正确代码示例:

/*eslint no-param-reassign: ["error", { "props": false }]*/ function foo(bar) { bar.prop = "value"; } function foo(bar) { delete bar.aaa; } function foo(bar) { bar.aaa++; }

{ "props": true }选项的错误代码示例:

/*eslint no-param-reassign: ["error", { "props": true }]*/ function foo(bar) { bar.prop = "value"; } function foo(bar) { delete bar.aaa; } function foo(bar) { bar.aaa++; }

使用"ignorePropertyModificationsFor"设置{ "props": true }选项的正确代码示例:

/*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsFor": ["bar"] }]*/ function foo(bar) { bar.prop = "value"; } function foo(bar) { delete bar.aaa; } function foo(bar) { bar.aaa++; }

何时不使用它

如果你想允许赋值给函数参数,那么你可以放心地禁用这个规则。

进一步阅读