Skip to content
← Back to rules

unicorn/consistent-function-scoping 懸念

An auto-fix is available for this rule.

何をするか

外側のスコープから変数をキャプチャしないスコープに宣言された関数を禁止します。

なぜ問題なのか

関数の宣言を可能な限り高いスコープに移動することで、可読性が向上し、直接 パフォーマンスの改善 が得られ、また 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

参照