【问题标题】:Can you locally declare a global variable for eslint?你可以在本地为 eslint 声明一个全局变量吗?
【发布时间】:2020-11-16 13:30:00
【问题描述】:

使用 eslint,您可以使用 /* global <name-of-var> */ 声明一个全局变量。例如

/* global document */

const elem = document.querySelector(selector);

是否可以声明一个全局但只在某个范围内?

function foo(selector) {
  /* global document */
  return document.querySelector(selector);
}

function bar(selector) {
  return document.querySelector(selector);  // error! document undefined
}

测试上面的示例fails,在foo 中将document 声明为全局,使其在bar 中可访问。

使全局访问范围限定的优点是,如果您删除一个函数,则无需清理任何其他内容。它声明了它自己的访问权限。就好像您将全局变量放在文件顶部并删除一个函数一样,您还必须清理文件顶部。基于本地信息越多越好的想法,它还可以更好地记录变量的来源。

注意:虽然我知道功能不同,但 python 的概念是让单个函数访问全局。这样做不会让所有函数都可以访问该全局变量,因此通常为每个函数声明全局变量的想法并不罕见。

有没有办法在eslint的特定范围内声明全局的存在?

【问题讨论】:

  • 您可能希望使用browser 选项,而不是明确提及浏览器提供的全局变量。
  • 谢谢,但不,我绝对不想使用浏览器选项。使用浏览器选项 eslint 无法找出未定义的变量,因为它必须假设它们存在于浏览器对象上。见this

标签: javascript eslint


【解决方案1】:

The documentation 没有说明仅在函数中本地执行此操作。我明白你所描述的重点;你永远不知道,他们可能会接受拉取请求,添加...

两种解决方法:

  1. 将需要全局的函数组合在自己的模块中。

  2. 使用eslint-disable-lineeslint-disable-next-line 和内联赋值,如下所示:

    function foo(selector) {
      const doc = document; /* eslint-disable-line no-undef */
      return doc.querySelector(selector);
    }
    

【讨论】:

    猜你喜欢
    • 2020-03-01
    • 2010-10-01
    • 2014-01-31
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多