Spec-Zone.ru › ESLint

no-param-reassign

Запрещает переназначение параметров функции

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

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

Описание правила

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

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

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

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

const foo1 = function(bar) {
    bar++;
}

const foo2 = function(bar) {
    for (bar in baz) {}
}

const foo3 = function(bar) {
    for (bar of baz) {}
}

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

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

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

Параметры

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

props

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

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

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

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 } при заданном значении "ignorePropertyModificationsFor":

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

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

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

JavaScript: не переназначайте аргументы функции
spin.atomicobject.com

Ресурсы

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

© 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