跳至內容

unicorn/consistent-function-scoping 可疑

🚧 自動修正仍在開發中。

作用

不允許在未捕獲外部作用域任何變數的作用域中宣告的函式。

為什麼這不好?

將函式宣告移動到盡可能高的作用域可以提高可讀性,直接 提高效能,並允許 JavaScript 引擎更好地 最佳化您的效能

範例

此規則的不正確程式碼範例

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";
  };
}

此規則的正確程式碼範例

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;
}

選項

checkArrowFunctions

類型:boolean
預設值:true

傳遞 "checkArrowFunctions": false 以停用箭頭函式的檢查。

限制

此規則不會偵測或移除函式內部的多餘程式碼區塊

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;
  }
})();

參考

以 MIT 許可發布。