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" по умолчанию:
/*eslint func-style: ["error", "expression"]*/
Примеры правильного кода для этого правила со значением параметра "expression" по умолчанию:
/*eslint func-style: ["error", "expression"]*/
var foo = function() {
// ...
};
var foo = () => {};
// allowed as allowArrowFunctions : false is applied only for declaration
объявление
Примеры неправильного кода для этого правила со значением параметра "declaration":
/*eslint func-style: ["error", "declaration"]*/
var ;
var ;
Примеры правильного кода для этого правила со значением параметра "declaration":
/*eslint func-style: ["error", "declaration"]*/
function foo() {
// ...
}
// Methods (functions assigned to objects) are not checked by this rule
SomeObject.foo = function() {
// ...
};
РазрешитьСтрелочныеФункции
Примеры дополнительного правильного кода для этого правила со значениями параметров "declaration", { "allowArrowFunctions": true }:
/*eslint func-style: ["error", "declaration", { "allowArrowFunctions": true }]*/
var foo = () => {};
Переопределения
именованныеЭкспорты
выражение
Примеры неправильного кода для этого правила со значением параметра "declaration" и {"overrides": { "namedExports": "expression" }}:
/*eslint func-style: ["error", "declaration", { "overrides": { "namedExports": "expression" } }]*/
export
Примеры правильного кода для этого правила со значением параметра "declaration" и {"overrides": { "namedExports": "expression" }}:
/*eslint func-style: ["error", "declaration", { "overrides": { "namedExports": "expression" } }]*/
export var foo = function() {
// ...
};
export var bar = () => {};
объявление
Примеры неправильного кода для этого правила со значением параметра "expression" и {"overrides": { "namedExports": "declaration" }}:
/*eslint func-style: ["error", "expression", { "overrides": { "namedExports": "declaration" } }]*/
export var ;
export var ;
Примеры правильного кода для этого правила со значением параметра "expression" и {"overrides": { "namedExports": "declaration" }}:
/*eslint func-style: ["error", "expression", { "overrides": { "namedExports": "declaration" } }]*/
export function foo() {
// ...
}
игнорировать
Примеры правильного кода для этого правила со значением параметра {"overrides": { "namedExports": "ignore" }}:
/*eslint func-style: ["error", "expression", { "overrides": { "namedExports": "ignore" } }]*/
export var foo = function() {
// ...
};
export var bar = () => {};
export function baz() {
// ...
}
Когда не следует его использовать
Если вы хотите, чтобы разработчики сами решали, как они хотят писать функции, вы можете отключить это правило.
Версия
Это правило было введено в ESLint v0.2.0.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/func-style