Spec-Zone.ru › ESLint

func-style

Принудительно использовать либо объявления function , либо выражения, присваиваемые переменным

Существует два способа определения функций в JavaScript: function объявления и выражения функций, присваиваемые переменным. Объявления функций — это операторы, начинающиеся с ключевого слова function . Выражения функций могут быть стрелочными функциями или использовать ключевое слово function с необязательным именем. Вот несколько примеров:

// function declaration
function doSomething() {
    // ...
}

// arrow function expression assigned to a variable
const doSomethingElse = () => {
    // ...
};

// function expression assigned to a variable
const doSomethingAgain = function() {
    // ...
};

Основное различие между function объявлениями и выражениями функций заключается в том, что объявления поднимаются в начало области видимости, в которой они определены, что позволяет вам писать код, использующий функцию до её объявления. Например:

doSomething(); // ok

function doSomething() {
    // ...
}

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

doSomething();  // error!

var doSomething = function() {
    // ...
};

В этом случае, doSomething() не определено в момент вызова, и это приводит к ошибке во время выполнения.

Из-за этих различных поведений обычно существуют руководящие принципы относительно того, какой стиль функций следует использовать. Здесь нет действительно правильного или неправильного выбора, это просто предпочтение.

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

Это правило принуждает к определённому типу стиля функций, либо function объявлениям, либо выражениям, присваиваемым переменным. Вы можете указать, какой стиль вам нравится, в конфигурации.

Примечание: это правило не относится ко всем функциям. Например, функция обратного вызова, переданная в качестве аргумента другой функции, не рассматривается этим правилом.

Параметры

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

  • "expression" (по умолчанию) требует использования выражений функций вместо объявлений функций
  • "declaration" требует использования объявлений функций вместо выражений функций

Это правило имеет параметр типа объект для двух исключений:

  • "allowArrowFunctions": true (по умолчанию false) разрешает использование стрелочных функций. Этот параметр применяется только тогда, когда строковый параметр установлен на "declaration" (стрелочные функции всегда разрешены, когда строковый параметр установлен на "expression", независимо от этого параметра)
  • "overrides":
    • "namedExports": "expression" | "declaration" | "ignore": используется для переопределения стилей функций в именованных экспортах
      • "expression": как строковый параметр
      • "declaration": как строковый параметр
      • "ignore": любой стиль приемлем

выражение

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

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

functionfoo(){// ...}

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

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

var foo = function() {
    // ...
};

var foo = () => {};

// allowed as allowArrowFunctions : false is applied only for declaration

объявление

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

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

var foo=function(){// ...};

var foo = () => {};

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

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

function foo() {
    // ...
}

// Methods (functions assigned to objects) are not checked by this rule
SomeObject.foo = function() {
    // ...
};

РазрешитьСтрелочныеФункции

Примеры дополнительного правильного кода для этого правила со значениями параметров "declaration", { "allowArrowFunctions": true }:

Открыть в Playground
/*eslint func-style: ["error", "declaration", { "allowArrowFunctions": true }]*/

var foo = () => {};

Переопределения

именованныеЭкспорты

выражение

Примеры неправильного кода для этого правила со значением параметра "declaration" и {"overrides": { "namedExports": "expression" }}:

Открыть в Playground
/*eslint func-style: ["error", "declaration", { "overrides": { "namedExports": "expression" } }]*/

export functionfoo(){// ...}

Примеры правильного кода для этого правила со значением параметра "declaration" и {"overrides": { "namedExports": "expression" }}:

Открыть в Playground
/*eslint func-style: ["error", "declaration", { "overrides": { "namedExports": "expression" } }]*/

export var foo = function() {
    // ...
};

export var bar = () => {};
объявление

Примеры неправильного кода для этого правила со значением параметра "expression" и {"overrides": { "namedExports": "declaration" }}:

Открыть в Playground
/*eslint func-style: ["error", "expression", { "overrides": { "namedExports": "declaration" } }]*/

export var foo=function(){// ...};

export var bar = () => {};

Примеры правильного кода для этого правила со значением параметра "expression" и {"overrides": { "namedExports": "declaration" }}:

Открыть в Playground
/*eslint func-style: ["error", "expression", { "overrides": { "namedExports": "declaration" } }]*/

export function foo() {
    // ...
}
игнорировать

Примеры правильного кода для этого правила со значением параметра {"overrides": { "namedExports": "ignore" }}:

Открыть в Playground
/*eslint func-style: ["error", "expression", { "overrides": { "namedExports": "ignore" } }]*/

export var foo = function() {
    // ...
};

export var bar = () => {};

export function baz() {
    // ...
}

Когда не следует его использовать

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

Версия

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

Дополнительные материалы

Охватывание и поднятие в JavaScript

Ресурсы

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

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

Spec-Zone.ru

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