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++;
}
何时不使用它
如果你想允许赋值给函数参数,那么你可以放心地禁用这个规则。
进一步阅读
- JavaScript: Don’t Reassign Your Function ArgumentsVersion 这个规则是在 ESLint 0.18.0.Resources 中引入的