no-param-reassign
Запрещает переназначение параметров функции
Присваивание переменным, объявленным в качестве параметров функции, может вводить в заблуждение и приводить к неожиданному поведению, поскольку изменение параметров функции также изменяет объект arguments, если не используется режим strict (см. раздел Когда не следует использовать это правило ниже). Часто присваивание параметрам функции является непреднамеренным и указывает на ошибку или оплошность программиста.
Это правило также можно настроить так, чтобы оно выдавало ошибку при изменении параметров функции. Побочные эффекты при работе с параметрами могут привести к неочевидному потоку выполнения и затруднить поиск ошибок.
Описание правила
Это правило помогает предотвратить непреднамеренное поведение, вызванное изменением или переназначением параметров функции.
Примеры неправильного кода для этого правила:
/*eslint no-param-reassign: "error"*/
const foo = function(bar) {
= 13;
}
const foo1 = function(bar) {
++;
}
const foo2 = function(bar) {
for ( in baz) {}
}
const foo3 = function(bar) {
for ( of baz) {}
}
Примеры правильного кода для этого правила:
/*eslint no-param-reassign: "error"*/
const foo = function(bar) {
const baz = bar;
}
Параметры
Это правило принимает один параметр — объект с логическим свойством "props" и массивами "ignorePropertyModificationsFor" и "ignorePropertyModificationsForRegex". По умолчанию для "props" задано значение false. Если для "props" задано значение true, правило выдаёт предупреждение при изменении свойств параметров, если только они не включены в "ignorePropertyModificationsFor" или "ignorePropertyModificationsForRegex", для которых по умолчанию задан пустой массив.
props
Примеры правильного кода для параметра { "props": false } по умолчанию:
/*eslint no-param-reassign: ["error", { "props": false }]*/
const foo = function(bar) {
bar.prop = "value";
}
const foo1 = function(bar) {
delete bar.aaa;
}
const foo2 = function(bar) {
bar.aaa++;
}
const foo3 = function(bar) {
for (bar.aaa in baz) {}
}
const foo4 = function(bar) {
for (bar.aaa of baz) {}
}
Примеры неправильного кода для параметра { "props": true }:
/*eslint no-param-reassign: ["error", { "props": true }]*/
const foo = function(bar) {
.prop = "value";
}
const foo1 = function(bar) {
delete .aaa;
}
const foo2 = function(bar) {
.aaa++;
}
const foo3 = function(bar) {
for (.aaa in baz) {}
}
const foo4 = function(bar) {
for (.aaa of baz) {}
}
Примеры правильного кода для параметра { "props": true } при заданном значении "ignorePropertyModificationsFor":
/*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsFor": ["bar"] }]*/
const foo = function(bar) {
bar.prop = "value";
}
const foo1 = function(bar) {
delete bar.aaa;
}
const foo2 = function(bar) {
bar.aaa++;
}
const foo3 = function(bar) {
for (bar.aaa in baz) {}
}
const foo4 = function(bar) {
for (bar.aaa of baz) {}
}
Примеры правильного кода для параметра { "props": true } при заданном значении "ignorePropertyModificationsForRegex":
/*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsForRegex": ["^bar"] }]*/
const foo = function(barVar) {
barVar.prop = "value";
}
const foo1 = function(barrito) {
delete barrito.aaa;
}
const foo2 = function(bar_) {
bar_.aaa++;
}
const foo3 = function(barBaz) {
for (barBaz.aaa in baz) {}
}
const foo4 = function(barBaz) {
for (barBaz.aaa of baz) {}
}
Когда не следует использовать это правило
Если вы хотите разрешить присваивание параметрам функции, это правило можно безопасно отключить.
В режиме strict код не синхронизирует индексы объекта arguments с каждой привязкой параметра. Поэтому это правило не требуется для защиты от изменения объекта arguments в модулях ESM или других функциях в режиме strict.
Версия
Это правило появилось в ESLint v0.18.0.
Дополнительная литература
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-param-reassign