unicorn/consistent-function-scoping Suspicious
What it does
Disallow functions that are declared in a scope which does not capture any variables from the outer scope.
Why is this bad?
Moving function declarations to the highest possible scope improves readability, directly improves performance and allows JavaScript engines to better optimize your performance.
Examples
Examples of incorrect code for this rule:
js
export function doFoo(foo) {
// Does not capture anything from the scope, can be moved to the outer scope
function doBar(bar) {
return bar === "bar";
}
return doBar;
}
function doFoo(foo) {
const doBar = (bar) => {
return bar === "bar";
};
}
Examples of correct code for this rule:
js
function doBar(bar) {
return bar === "bar";
}
export function doFoo(foo) {
return doBar;
}
export function doFoo(foo) {
function doBar(bar) {
return bar === "bar" && foo.doBar(bar);
}
return doBar;
}
Options
checkArrowFunctions
Type: boolean
Default: true
Pass "checkArrowFunctions": false
to disable linting of arrow functions.
Limitations
This rule does not detect or remove extraneous code blocks inside of functions:
js
function doFoo(foo) {
{
function doBar(bar) {
return bar;
}
}
return foo;
}
It also ignores functions that contain JSXElement
references:
jsx
function doFoo(FooComponent) {
function Bar() {
return <FooComponent />;
}
return Bar;
}
Immediately invoked function expressions (IIFE) are ignored:
js
(function () {
function doFoo(bar) {
return bar;
}
})();