将所有代码(包括 class 定义)包装在闭包中以避免全局变量是 Javascript 中可接受的做法吗?

Is, wrapping all code(including class definitions) inside a closure in order to avoid global variables an acceptable practice in Javascript?

想象一下您必须处理事件侦听器、动画帧以及您在使用 canvas 时可能遇到的所有东西的情况。 这对我来说很难,尝试让它在没有任何全局变量的情况下工作(但这就是我正在尝试做的),因为范围界定带来了所有混乱。 所以,我想知道这样的解决方案是否可以接受:

(function(){
  //some class declaration

  //some other function declaration
  
  //some variable definitions

  //some procedural code

  //event listeners

})();

很好,尽管使用模块(在浏览器中由 <script type="module"> 触发)避免了这样做的需要,因为它将 top-level var 变量和函数声明范围限定到模块而不是作为全局变量。

这还可以让您更轻松地缩小其他 self-contained 代码块(如 类)的范围,方法是将它们移动到单独的模块中并 import 对它们进行处理。 (在 JS 具有本机模块之前 revealing module pattern 将用于某些事情)。