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
型: boolean
デフォルト: true
アロー関数でのスコープチェックを有効にするかどうか。
使用方法
設定ファイルまたは CLI でこのルールを 有効化 するには、次のようにします:
json
{
"rules": {
"unicorn/consistent-function-scoping": "error"
}
}bash
oxlint --deny unicorn/consistent-function-scoping