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