Javascript 如何将全局常量重构为模块-JS最佳实践

Javascript 如何将全局常量重构为模块-JS最佳实践,javascript,jasmine,global-variables,refactoring,constants,Javascript,Jasmine,Global Variables,Refactoring,Constants,我是JS新手——我目前的阅读表明,全局变量是一个巨大的危险信号,应该不惜一切代价避免。我目前正在进行一项重构挑战,我在.js文件中声明了一些数值,这些数值随后会在程序中的其他.js文件中调用。我不确定在这里使用什么样的最佳实践,从而消除任何代码气味 我有一些常量存储在一个文件中,options.js。然后,这些常量将在其他几个文件中使用,如agedbrie.js和quality.js 所有这些文件都存储在一个文件夹中 就目前为止所采取的步骤而言,我考虑过在每个需要它们的函数中声明所需的变量,因此

我是JS新手——我目前的阅读表明,全局变量是一个巨大的危险信号,应该不惜一切代价避免。我目前正在进行一项重构挑战,我在.js文件中声明了一些数值,这些数值随后会在程序中的其他.js文件中调用。我不确定在这里使用什么样的最佳实践,从而消除任何代码气味

我有一些常量存储在一个文件中,
options.js
。然后,这些常量将在其他几个文件中使用,如
agedbrie.js
quality.js

所有这些文件都存储在一个文件夹中

就目前为止所采取的步骤而言,我考虑过在每个需要它们的函数中声明所需的变量,因此(我认为)将它们从全局空间中移除。然而,这会导致大量的重复,并导致代码不遵循枯燥的原则

Options.js:

 const MIN_SALE_DATE = 0
 const MAX_QUALITY = 50
 const MIN_QUALITY = 0
 const SULFURAS_QUALITY = 80
在我的程序的其他文件中调用这些常量的示例:

Agedbrie.js

(function(exports){

//other code unrelated
}

AgedBrie.prototype.updateQuality = function () {
    if (this.sellIn > MIN_SALE_DATE ){
quality.js:

    //other code 

function qualityMaximum(quality){
    if (quality > MAX_QUALITY) {
        quality = MAX_QUALITY
    }
    return quality
}
    //further code
从本质上说,我有现在就可以工作的代码,并且通过了我编写的测试,但是我渴望尽早获得最佳实践,因此消除任何可能的全局变量是非常重要的。提前谢谢你

编辑

只是想澄清一下——这是一次尝试

我有一个可行的解决方案,只是它目前包含全局变量,我知道在最佳实践中,这些变量有点危险

编辑2

我自己设法纠正了这一点——如果有人通过谷歌来到这里,我就是这么做的:

options.js

var OPTIONS = (function() {

  var private = {
    "MIN_SALE_DATE" : 0,
    "MAX_QUALITY" : 50,
    "MIN_QUALITY" : 0,
    "SULFURAS_QUALITY" : 80
    };

  return {
    get: function(name) { return private[name]; }
  };

})();
然后,为了在我的代码的其他地方调用这些变量:

OPTIONS.get("name here")

为了避免使任何东西全球化,您必须将所有脚本一起编译成一个,可能需要像Webpack这样的捆绑包。这是后端项目还是前端?抱歉,我应该更清楚;该项目是纯粹的重构-即镀金玫瑰-正如我所说,我有一个可行的解决方案,只是我担心可能的全局变量使用您的
var选项
仍在污染全局范围。为了避免这种情况,你必须将所有脚本放在一个文件中(可能是在前面提到的绑定器的帮助下),并使用iLife。为了避免使任何东西全球化,你必须将所有脚本编译到一个文件中,可能是使用像Webpack这样的绑定器。这是后端项目还是前端?抱歉,我应该更清楚;该项目是纯粹的重构-即镀金玫瑰-正如我所说,我有一个可行的解决方案,只是我担心可能的全局变量使用您的
var选项
仍在污染全局范围。为了避免这种情况,您必须将所有脚本放在一个文件中(如前所述,可能需要bundler的帮助)并使用IIFE。