将所有代码(包括 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 将用于某些事情)。
想象一下您必须处理事件侦听器、动画帧以及您在使用 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 将用于某些事情)。