Spec-Zone.ru › ESLint

func-names

Требовать или запрещать именованные function выражения

Всё более распространённой практикой становится присвоение именам выражениям функций для улучшения отладки. Например:

Foo.prototype.bar = function bar() {};

Добавление второго bar в приведённом выше примере является необязательным. Если вы опустите имя функции, при возникновении исключения функция, вероятно, будет отображаться примерно так: anonymous function в трассировке стека. Если вы укажете необязательное имя для выражения функции, в трассировке стека будет отображено имя выражения функции.

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

Это правило может навязывать или запрещать использование именованных выражений функций.

Параметры

Это правило имеет строковый параметр:

  • "always" (по умолчанию) требует, чтобы выражения функций имели имя
  • "as-needed" требует, чтобы выражения функций имели имя, если имя не присваивается автоматически в соответствии со спецификацией ECMAScript.
  • "never" запрещает именованные выражения функций, за исключением рекурсивных функций, где имя необходимо

Это правило имеет параметр типа объект:

  • "generators": "always" | "as-needed" | "never"
    • "always" требовать именованные генераторы
    • "as-needed" требовать именованные генераторы, если имя не присваивается автоматически в соответствии со спецификацией ECMAScript.
    • "never" запрещать именованные генераторы, где это возможно.

Если значение для generators не указано, поведение для функций-генераторов возвращается к базовому параметру.

Обратите внимание, что "always" и "as-needed" требуют, чтобы выражения функций и объявления функций в export default объявлениях имели имя.

всегда

Примеры неправильного кода для этого правила с параметром "always" по умолчанию:

Открыть в Playground
/*eslint func-names: ["error", "always"]*/

Foo.prototype.bar = function() {};

const cat = {
  meow: function() {}
}

(function() {
    // ...
}())

export default function() {}

Примеры правильного кода для этого правила с параметром "always" по умолчанию:

Открыть в Playground
/*eslint func-names: ["error", "always"]*/

Foo.prototype.bar = function bar() {};

const cat = {
  meow() {}
}

(function bar() {
    // ...
}())

export default function foo() {}

по мере необходимости

ECMAScript 6 ввёл name свойство для всех функций. Значение name определяется путём анализа кода вокруг функции, чтобы определить, можно ли вывести имя. Например, функция, присвоенная переменной, автоматически получает name свойство, равное имени переменной. Значение name затем используется в трассировках стека для более лёгкой отладки.

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

Открыть в Playground
/*eslint func-names: ["error", "as-needed"]*/

Foo.prototype.bar = function() {};

(function() {
    // ...
}())

export default function() {}

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

Открыть в Playground
/*eslint func-names: ["error", "as-needed"]*/

var bar = function() {};

const cat = {
  meow: function() {}
}

class C {
    #bar = function() {};
    baz = function() {};
}

quux ??= function() {};

(function bar() {
    // ...
}())

export default function foo() {}

никогда

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

Открыть в Playground
/*eslint func-names: ["error", "never"]*/

Foo.prototype.bar = function bar() {};

(function bar() {
    // ...
}())

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

Открыть в Playground
/*eslint func-names: ["error", "never"]*/

Foo.prototype.bar = function() {};

(function() {
    // ...
}())

генераторы

Примеры неправильного кода для этой правила с "always", { "generators": "as-needed" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

(function*() {
    // ...
}())

Примеры правильного кода для этого правила с "always", { "generators": "as-needed" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

var foo = function*() {};

Примеры неправильного кода для этого правила с "always", { "generators": "never" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

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

Примеры правильного кода для этого правила с "always", { "generators": "never" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

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

Примеры неправильного кода для этого правила с "as-needed", { "generators": "never" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

Примеры правильного кода для этого правила с "as-needed", { "generators": "never" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

Примеры неправильного кода для этого правила с "never", { "generators": "always" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

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

Примеры правильного кода для этого правила с "never", { "generators": "always" } параметрами:

Открыть в Playground
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

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

Совместимость

  • JSCS: requireAnonymousFunctions
  • JSCS: disallowAnonymousFunctions

Версия

Это правило было добавлено в ESLint v0.4.0.

Дополнительное чтение

Объяснение функций - Блог Марка Даггета
Имена функций в ES6

Ресурсы

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

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

Spec-Zone.ru

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