Skip to content
← Back to rules

eslint/no-inner-declarations 严格

它的作用

禁止在嵌套块中声明变量或函数。

为什么这是不好的?

变量声明允许出现在任何语句可以出现的位置,即使嵌套在其他块的深层内部也是如此。
由于变量提升(hoisting)的影响,这种写法通常并不理想。将声明移动到程序或函数体的根级别可以提高代码清晰度。
需要注意的是,块级绑定(letconst)不会被提升,因此不受此规则影响。

示例

以下为错误的代码示例:

javascript
if (test) {
  function doSomethingElse() {}
}

以下为正确的代码示例:

javascript
function doSomethingElse() {}
if (test) {
  // 你的代码在此处
}

配置

第一个选项

type: "functions" | "both"

确定要检查的声明类型。

"functions"

禁止在嵌套块中进行函数声明。

"both"

禁止在嵌套块中进行函数和 var 声明。

第二个选项

此选项是一个包含以下属性的对象:

blockScopedFunctions

type: "allow" | "disallow"

"allow"

在严格模式下(ES6+ 行为)允许在嵌套块中进行函数声明。

"disallow"

无论是否处于严格模式,均禁止在嵌套块中进行函数声明。

如何使用

通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "no-inner-declarations": "error"
  }
}
bash
oxlint --deny no-inner-declarations

参考资料