no-redeclare
禁止变量重新声明
✅ 推荐
在配置文件中使用来自 @eslint/js
的 recommended
配置将启用此规则。
在 JavaScript 中,可以使用 var
重新声明同一个变量名。这可能导致混淆,因为不清楚变量在哪里实际声明和初始化。
规则详情
此规则旨在消除在同一作用域中具有多个声明的变量。
此规则的错误代码示例
在 Playground 中打开
/*eslint no-redeclare: "error"*/
var a = 3;
var = 10;
class C {
foo() {
var b = 3;
var = 10;
}
static {
var c = 3;
var = 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
,此规则还会检查内置全局变量(如 Object
、Array
、Number
等)的重新声明。
builtinGlobals
"builtinGlobals"
选项将检查全局作用域中内置全局变量的重新声明。
{ "builtinGlobals": true }
选项的错误代码示例
在 Playground 中打开
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/
var = 0;
请注意,当使用 sourceType: "commonjs"
(或 ecmaFeatures.globalReturn
,如果使用默认解析器)时,程序的顶层作用域实际上不是全局作用域,而是“模块”作用域。在这种情况下,声明一个与内置全局变量同名的变量不是重新声明,而是对全局变量的遮蔽。在这种情况下,应使用带有 "builtinGlobals"
选项的no-shadow
规则。
由 TypeScript 处理
在使用 TypeScript 时禁用此规则是安全的,因为 TypeScript 的编译器会强制执行此检查。
请注意,虽然 TypeScript 会捕获 let
重新声明和 const
重新声明,但它不会捕获 var
重新声明。因此,如果您在 TypeScript 代码库中使用旧的 var
关键字,此规则仍然会提供一些价值。
相关规则
版本
此规则在 ESLint v0.0.9 中引入。