unicorn/consistent-function-scoping 可疑
它的作用
禁止在不捕获任何外部作用域变量的范围内声明函数。
为什么这是不好的?
将函数声明提升到尽可能高的作用域可以提高代码可读性,直接改善性能,并使 JavaScript 引擎能够更好地优化性能。
示例
以下为该规则的错误代码示例:
js
export function doFoo(foo) {
// 未从作用域中捕获任何内容,可移至外层作用域
function doBar(bar) {
return bar === "bar";
}
return doBar;
}
function doFoo(foo) {
const doBar = (bar) => {
return bar === "bar";
};
}以下为该规则的正确代码示例:
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;
}局限性
此规则不会检测或删除函数内部多余的代码块:
js
function doFoo(foo) {
{
function doBar(bar) {
return bar;
}
}
return foo;
}它也会忽略包含 JSXElement 引用的函数:
jsx
function doFoo(FooComponent) {
function Bar() {
return <FooComponent />;
}
return Bar;
}立即调用的函数表达式(IIFE) 被忽略:
js
(function () {
function doFoo(bar) {
return bar;
}
})();配置
此规则接受一个配置对象,包含以下属性:
checkArrowFunctions
type: boolean
default: true
是否检查箭头函数的作用域。
如何使用
要通过配置文件或命令行启用此规则,可以使用:
json
{
"rules": {
"unicorn/consistent-function-scoping": "error"
}
}bash
oxlint --deny unicorn/consistent-function-scoping