Versions

no-redeclare

Disallow variable redeclaration

Recommended

The "extends": "eslint:recommended" property in a configuration file enables this rule

在 JavaScript 中,有可能使用 var 重新声明相同的变量名。这可能会导致混淆,不知道变量到底是在哪里声明和初始化的。

规则细节

这条规则的目的是消除在同一范围内有多个声明的变量。

使用此规则的错误示例:

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

使用此规则的正确示例:

Open in 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 } 选项的错误示例:

Open in Playground
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/

var Object = 0;

使用 { "builtinGlobals": true } 选项和 browser 环境的错误示例:

Open in Playground
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/
/*eslint-env browser*/

var top = 0;

browser 环境有许多内置的全局变量(例如:top)。一些内置的全局变量不能被重新声明。

注意,当使用 nodecommonjs 环境(或 ecmaFeatures.globalReturn,如果使用默认解析器)时,程序的顶部范围实际上不是全局范围,而是“模块”范围。在这种情况下,声明一个以内置全局命名的变量并不是重新声明,而是对全局变量进行影射。在这种情况下,应该使用 no-shadow 规则和 "builtinGlobals" 选项。

Version

This rule was introduced in ESLint v0.0.9.

Resources

更改语言