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

type: boolean

default: true

是否检查箭头函数的作用域。

如何使用

要通过配置文件或命令行启用此规则,可以使用:

json
{
  "rules": {
    "unicorn/consistent-function-scoping": "error"
  }
}
bash
oxlint --deny unicorn/consistent-function-scoping

参考资料