为什么开发人员偶尔会将“SharedArrayBuffer”和“Atomics”添加到“.eslintrc.json”“globals”属性中?

R. *_*ung 9 javascript configuration global-variables eslint eslintrc


\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0添加到配置文件属性中的SharedArrayBuffer、 和的目的是什么?Atomics.eslintrc.json"globals"

\n
\n
\n
我见过人们做的事情的例子:
\n
    /** @file "./.eslintrc.json" */\n\n    "globals": {\n        "Atomics": "readonly",\n        "SharedArrayBuffer": "readonly"\n    }\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

JΛY*_*ÐΞV 13


\n


\n

定义内置全局属性

\n
\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 我认为合适的起点是告诉读者JavaScript 实现了内置全局变量。这意味着:在 JavaScript 运行之前,JS 引擎会初始化 ECMAScript 标准定义的预定义变量,这些变量由编写 JavaScript 引擎(V8、Spider-Monkey 等)的人员实现。内置全局变量非常易于访问,事实上它们可以在 JavaScript 中随处访问。

\n



\n
\n

内置全局变量可能成为工具问题的原因

\n
\n

这些变量甚至不需要声明或启动。更简单地说,从 JavaScript 程序的角度来看,它们始终存在,并且始终可访问,正是这些特征使内置全局变量成为开发工具(尤其是“ ESLint”)的问题。

\n
\n
\n
\n

Globals Property 提供解决方案

\n
\n

“ESLint”知道变量何时被定义,因为它会解析您的代码\xe2\x80\x94,一旦到达变量的声明,它就会记录该声明。ESLint 使用它收集的有关变量声明的数据来了解有关变量的一些不同“事物”,但我们关心的是,它使用这些数据来了解正在使用的变量是否先前已声明,如果未声明, ESLint 显示一个Error. 因为,如前所述,全局变量从未声明过,即使代码有效,ESLint 也会显示错误,并且如果您按照 ESLint 建议执行操作并声明了全局变量,那将不仅仅是一个错误,而且是愚蠢的(请原谅我的法语,但我想大多数人都会同意),因此为了避免所有这些混乱,ESLint 提供了以特殊的方式声明任何全局变量(无论是否预建)的能力"globals":{}

\n

该变量的。通过按照我刚才描述的方式工作,ESLint 能够在程序未使用已声明的变量时通知您

\n

通过解析你的脚本,并准备好你定义任意变量的部分,并且由于你没有定义内置全局变量,ESLint 无法知道它们已经被实例化,当然,除非你将它们声明为您eslintrc.json(或者如果您是反叛者,.eslintrc.yaml)属性中的全局变量"globals":{},可以在.eslintrc.json(或者对于反叛者,.eslintrc.yaml文件)中找到。

\n
\n
\n
\n

原子和 SharedArrayBuffer

\n
\n

因此,最终您可以看到 Atomics 和 SharedArrayBuffer 是内置全局变量,ESLint 无法识别。既然您在询问它们,我假设您没有使用它们,如果我的假设是正确的,那么您应该删除它们。不要声明任何您从未使用过的全局变量。我不知道 Atomics 和 SharedArrayBuffer 最初是如何开始默认作为全局变量包含在 ESLint 配置文件中的,但据我所知,这种做法是不合理的,我只在“常规”中看到它互联网上显示的教程。如果有的话,应该是包含 Mocha 全局变量,因为 JavaScript 开发人员使用 Mocha 进行测试比使用 Atomics 和 SharedArrayBuffer 更为常见,但 Mocha 不是内置的,因此这实际上可能很愚蠢。IMO,如果您不使用全局变量,请不要在任何地方声明它,即使在配置文件中也是如此。

\n
\n
\n
以下是我看到的最常见的预构建全局变量:
\n
\n
    \n
  • 数组缓冲区
  • \n
  • 共享数组缓冲区
  • \n
  • 原子学
  • \n
  • JSON
  • \n
\n
\n
\n

如果您想知道所有这些built-in globals是什么,您可以点击上面的 \xe2\x80\x94 链接,它包含在本答案的开头。

\n
\n