Spec-Zone.ru › ESLint

no-param-reassign

Запрет на переприсвоение параметров function

Присваивание переменным, объявленным в качестве параметров функции, может быть вводящим в заблуждение и привести к запутанному поведению, так как изменение параметров функции также изменит объект arguments в режиме нестрогого выполнения (см. Когда его не следует использовать ниже). Часто, присваивание параметрам функции является непреднамеренным и свидетельствует об ошибке или ошибке программиста.

Это правило также может быть настроено для того, чтобы сообщать об ошибке, когда параметры функции изменяются. Побочные эффекты на параметры могут привести к неинтуитивному потоку выполнения и затруднить отслеживание ошибок.

Подробное описание правила

Это правило направлено на предотвращение непреднамеренного поведения, вызванного изменением или переприсвоением параметров функции.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-param-reassign: "error"*/

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

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

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

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

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint no-param-reassign: "error"*/

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

Параметры

Это правило принимает один параметр — объект, содержащий булеву собственность "props", и массивы "ignorePropertyModificationsFor" и "ignorePropertyModificationsForRegex". "props" по умолчанию false. Если "props" установлено в true, это правило выдает предупреждение об изменении свойств параметров, если они не включены в "ignorePropertyModificationsFor" или "ignorePropertyModificationsForRegex", которые по умолчанию являются пустым массивом.

Свойства

Примеры правильного кода для параметра { "props": false } по умолчанию:

Открыть в Playground
/*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 }.

Открыть в Playground
/*eslint no-param-reassign: ["error", { "props": true }]*/

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 } с "ignorePropertyModificationsFor" установленным:

Открыть в Playground
/*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" установленным:

Открыть в Playground
/*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.

Дополнительная литература

JavaScript: Не переприсваивайте аргументы функции

Ссылки

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-param-reassign

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API