为什么开发者偶尔会在“.eslintrc.json”"globals"属性中加上"SharedArrayBuffer"&"Atomics"?

Why do developers occasionally add "SharedArrayBuffer" & "Atomics", to the ".eslintrc.json" "globals" property?


SharedArrayBuffer[=17的目的是什么=],正在添加到 .eslintrc.json 配置文件的 "globals" 属性?



我见过人们做的事的例子:
    /** @file "./.eslintrc.json" */

    "globals": {
        "Atomics": "readonly",
        "SharedArrayBuffer": "readonly"
    }




定义内置全局属性


我认为合适的起点是告诉读者 JavaScript implements Built-In Global Variables。这意味着:在 JavaScript 运行 之前,JS 引擎初始化由 ECMAScript 标准定义的预定义变量,这些变量由编写 JavaScript 引擎(V8,Spider -猴子等...)。内置全局变量非常容易评估,事实上它们在 JavaScript.

中随处可见




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


甚至不必声明或启动变量。更简单地说,从 JavaScript 程序的角度来看,它们始终存在,并且始终可以访问,正是这些特性使内置全局变量成为开发工具的问题,特别是 "ESLint".




全局变量属性 提供解决方案


"ESLint" 知道变量何时被定义,因为它会解析你的代码——一旦到达变量的声明,它就会记录声明。 ESLint 使用它收集的关于变量声明的数据来了解关于变量的一些不同的“事情”,但我们关心的是,它使用数据来了解变量是否被使用,之前声明过,如果没有声明,ESLint 会显示一个 Error。因为,如前所述,永远不会声明全局变量,即使代码有效,ESLint 也会显示错误,如果您按照 ESLint 的建议进行操作并声明全局变量,那不仅是错误,而且是愚蠢的(请原谅我的法语,但我想大多数人会同意),所以为了避免所有这些混乱,ESLint 提供了在特殊的 "globals":{}

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

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




原子和 SharedArrayBuffer


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



以下是我看到使用的最常见的预构建全局变量:

  • ArrayBuffer
  • SharedArrayBuffer
  • 原子
  • JSON

If you want to know what all the built-in globals are, you can follow the link above — its included at the start of this answer.