版本

no-redeclare

禁止变量重新声明

推荐

配置文件中使用来自 @eslint/jsrecommended 配置将启用此规则。

在 JavaScript 中,可以使用 var 重新声明同一个变量名。这可能导致混淆,因为不清楚变量在哪里实际声明和初始化。

规则详情

此规则旨在消除在同一作用域中具有多个声明的变量。

此规则的错误代码示例

在 Playground 中打开
/*eslint no-redeclare: "error"*/

var a = 3;
var a = 10;

class C {
    foo() {
        var b = 3;
        var b = 10;
    }

    static {
        var c = 3;
        var c = 10;
    }
}

此规则的正确代码示例

在 Playground 中打开
/*eslint no-redeclare: "error"*/

var a = 3;
a = 10;

class C {
    foo() {
        var b = 3;
        b = 10;
    }

    static {
        var c = 3;
        c = 10;
    }
}

选项

此规则接受一个可选参数,一个具有布尔属性 "builtinGlobals" 的对象。它默认为 true。如果设置为 true,此规则还会检查内置全局变量(如 ObjectArrayNumber 等)的重新声明。

builtinGlobals

"builtinGlobals" 选项将检查全局作用域中内置全局变量的重新声明。

{ "builtinGlobals": true } 选项的错误代码示例

在 Playground 中打开
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/

var Object = 0;

请注意,当使用 sourceType: "commonjs"(或 ecmaFeatures.globalReturn,如果使用默认解析器)时,程序的顶层作用域实际上不是全局作用域,而是“模块”作用域。在这种情况下,声明一个与内置全局变量同名的变量不是重新声明,而是对全局变量的遮蔽。在这种情况下,应使用带有 "builtinGlobals" 选项的no-shadow规则。

由 TypeScript 处理

在使用 TypeScript 时禁用此规则是安全的,因为 TypeScript 的编译器会强制执行此检查。

请注意,虽然 TypeScript 会捕获 let 重新声明和 const 重新声明,但它不会捕获 var 重新声明。因此,如果您在 TypeScript 代码库中使用旧的 var 关键字,此规则仍然会提供一些价值。

版本

此规则在 ESLint v0.0.9 中引入。

资源

更改语言