# no-undef

除非在 /*global */ 注释中提及,否则不允许使用未声明的变量

配置文件中的 "extends": "eslint:recommended" 属性启用了该规则

此规则可以帮助您定位因变量和参数名称拼写错误或意外隐式全局变量(例如,忘记 for 循环初始化程序中的 var 关键字)导致的潜在 ReferenceErrors。

# 规则详情

对未声明变量的任何引用都会导致警告,除非该变量在 /*global ...*/ 注释中明确提及,或在 配置文件中的 globals 键 中指定。这些的一个常见用例是,如果您有意使用在其他地方定义的全局变量(例如,在源自 HTML 的脚本中)。

此规则的错误代码示例:

/*eslint no-undef: "error"*/

var foo = someFunction();
var bar = a + 1;

带有 global 声明的此规则的正确代码示例:

/*global someFunction, a*/
/*eslint no-undef: "error"*/

var foo = someFunction();
var bar = a + 1;

请注意,此规则不允许分配给只读全局变量。如果您还想禁止这些分配,请参阅 no-global-assign

该规则也不允许重新声明全局变量。如果您还想禁止这些重新声明,请参阅 no-redeclare

# 选项

  • typeof 设置为 true 将对 typeof 检查中使用的变量发出警告(默认为 false)。

# typeof

默认 { "typeof": false } 选项的正确代码示例:

/*eslint no-undef: "error"*/

if (typeof UndefinedIdentifier === "undefined") {
    // do something ...
}

如果您想防止 typeof 检查尚未声明的变量,您可以使用此选项。

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

/*eslint no-undef: ["error", { "typeof": true }] */

if(typeof a === "string"){}

带有 global 声明的 { "typeof": true } 选项的正确代码示例:

/*global a*/
/*eslint no-undef: ["error", { "typeof": true }] */

if(typeof a === "string"){}

# 环境

为方便起见,ESLint 提供了预先定义流行库和运行时环境公开的全局变量的快捷方式。此规则支持这些环境,如 指定环境 中所列。下面给出几个例子。

# browser

browser 环境下此规则的正确代码示例:

/*eslint no-undef: "error"*/
/*eslint-env browser*/

setTimeout(function() {
    alert("Hello");
});

# Node.js

node 环境下此规则的正确代码示例:

/*eslint no-undef: "error"*/
/*eslint-env node*/

var fs = require("fs");
module.exports = function() {
    console.log(fs);
};

# 何时不使用

如果全局变量的显式声明不符合您的口味。

# 兼容性

此规则提供与 JSHintJSLint 中的全局变量处理的兼容性。

Last Updated: 5/13/2023, 8:55:38 PM