禁止对函数参数再赋值 (no-param-reassign)

栏目: eslint 发布时间:2021-12-24

先来看一个 eslint 报错信息:

error: Assignment to property of function parameter 'route' (no-param-reassign) at src/router/index.ts:14:5:
  12 | routes.forEach(route => {
  13 |   if (!route.meta) {
> 14 |     route.meta = {}
     |     ^
  15 |   }

no-param-reassign 规则

函数参数中的变量进行赋值可能会误导读者,导致混乱,也会改变 arguments 对象。通常,对函数参数进行赋值并非有意为之,更多的是程序员的书写错误做成的。

当函数参数被修改时,该规则也可能会失效。由此造成的副作用可能导致不直观的执行流程,使错误难以跟踪。

该规则旨在避免出现对函数参数的修改或重新赋值造成的非自主行为。

/**
 * 不推荐
 * /
/*eslint no-param-reassign: "error"*/

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

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

Options

该规则有一个选项,是个对象,其中有一个 "props" 的布尔属性和一个数组属性"ignorePropertyModificationsFor"。"props" 默认为 false。如果 "props" 设置为true,对参数的任何属性的修改,该规则都将发出警告, 除非在 "ignorePropertyModificationsFor"(默认为空数组) 有该参数。

/**
 * 以下配置是可以修改参数属性的
 * /
 
/*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++;
}

本文地址:https://www.tides.cn/p_eslint-no-param-reassign