Skip to content
← Back to rules

eslint/block-scoped-var 可疑

它的作用

强制要求变量在声明使用时均处于相同的块级作用域内。 此规则可防止意外地在预期块作用域之外使用变量,模拟 JavaScript 中类似 C 语言的块级作用域行为。

为什么这是不好的?

在 JavaScript 中,var 声明会被提升到其封闭函数的顶部,这可能导致在块(例如 iffor 内部)中声明的变量可以在该块外部被访问。 这可能会导致难以发现的错误。 通过强制执行块级作用域,此规则有助于避免提升问题,并使行为更接近其他语言对块变量的处理方式。

示例

此规则的 错误 代码示例:

js
/* block-scoped-var: "error" */

function doIf() {
  if (true) {
    var build = true;
  }
  console.log(build);
}

function doLoop() {
  for (var i = 0; i < 10; i++) {
    // 执行某些操作
  }
  console.log(i); // i 在此处仍然可访问
}

function doSomething() {
  if (true) {
    var foo = 1;
  }
  if (false) {
    foo = 2;
  }
}

function doTry() {
  try {
    var foo = 1;
  } catch (e) {
    console.log(foo);
  }
}

此规则的 正确 代码示例:

js
/* block-scoped-var: "error" */

function doIf() {
  var build;
  if (true) {
    build = true;
  }
  console.log(build);
}

function doLoop() {
  var i;
  for (i = 0; i < 10; i++) {
    // 执行某些操作
  }
  console.log(i);
}

function doSomething() {
  var foo;
  if (true) {
    foo = 1;
  }
  if (false) {
    foo = 2;
  }
}

function doTry() {
  var foo;
  try {
    foo = 1;
  } catch (e) {
    console.log(foo);
  }
}

如何使用

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

json
{
  "rules": {
    "block-scoped-var": "error"
  }
}
bash
oxlint --deny block-scoped-var

参考资料