# no-param-reassign

不允许重新分配 function 参数

对声明为函数参数的变量赋值可能会产生误导并导致行为混乱,因为修改函数参数也会改变 arguments 对象。通常,分配给函数参数是无意的,并且表示错误或程序员错误。

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

# 规则详情

此规则旨在防止因修改或重新分配函数参数而导致的意外行为。

此规则的错误代码示例:

/*eslint no-param-reassign: "error"*/

function foo(bar) {
    bar = 13;
}

function foo(bar) {
    bar++;
}

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

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

此规则的正确代码示例:

/*eslint no-param-reassign: "error"*/

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

# 选项

该规则采用一个选项,一个对象,具有布尔属性 "props",以及数组 "ignorePropertyModificationsFor""ignorePropertyModificationsForRegex""props" 默认为 false。如果 "props" 设置为 true,则此规则会警告不要修改参数属性,除非它们包含在 "ignorePropertyModificationsFor""ignorePropertyModificationsForRegex" 中,默认情况下为空数组。

# 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++;
}

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

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

{ "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++;
}

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

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

设置 "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++;
}

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

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

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

/*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsForRegex": ["^bar"] }]*/

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

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

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

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

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

# 何时不使用

如果您想允许分配给函数参数,那么您可以安全地禁用此规则。

Last Updated: 5/13/2023, 8:55:38 PM