no-implicit-globals
function在全局范围中禁止变量和声明( no-implicit-globals )
当使用浏览器脚本时,开发人员经常会忘记顶级作用域的变量和函数声明成为window
对象上的全局变量。与具有自己范围的模块相反。全局应明确分配给window
或者self
如果这是意图。否则,想要脚本本地的变量应该包含在 IIFE 中。
规则细节
此规则不允许在顶级脚本作用域中声明var
并命名function
声明。这不适用于 ES 和 CommonJS 模块,因为它们具有模块范围。
此规则的错误
代码示例:
/*eslint no-implicit-globals: "error"*/
var foo = 1;
function bar() {}
此规则的正确
代码示例:
/*eslint no-implicit-globals: "error"*/
// explicitly set on window
window.foo = 1;
window.bar = function() {};
// intended to be scope to this file
(function() {
var foo = 1;
function bar() {}
})(
在 ESLint 配置中使用此规则的正确
代码示例"parserOptions": { "sourceType": "module" }
:
/*eslint no-implicit-globals: "error"*/
// foo and bar are local to module
var foo = 1;
function bar() {}
何时不使用它
如果您希望能够在全局范围内声明变量和函数,则可以安全地禁用此规则。或者,如果您始终使用模块范围的文件,则此规则将永远不适用。
进一步阅读
- 立即调用函数表达式(IIFE)版本此规则在 ESLint 2.0.0-alpha-1.Resources 中引入