我是JS的新手,到目前为止,我的阅读表明全局变量是一个巨大的危险信号,应不惜一切代价避免使用。我目前正在处理重构难题,并且在.js文件中声明了一些数值,随后在程序中的其他.js文件中对其进行了调用。我不确定在这里使用的最佳做法,因此可以消除任何代码异味。
我有一些常量存储在文件options.js
中。然后,将这些常量用于其他几个文件中,例如agedbrie.js
和quality.js
。
所有这些文件都存储在一个文件夹中。
就目前为止采取的步骤而言,我已经考虑过简单地在每个需要它们的函数中声明所需的变量,因此(我认为)将它们从全局空间中删除。但是,这导致大量重复,并导致代码不遵循DRY原则。
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
从本质上讲,我有现在可以运行并通过我编写的测试的代码,但是我渴望尽早采用最佳实践,因此消除任何可能的全局变量非常重要。预先谢谢你!
编辑
请澄清-这是对Gilded Rose Kata
的尝试我有一个可行的解决方案,目前仅包含全局变量,就最佳实践而言,我知道这有点危险。
编辑2
我自己设法纠正了这一问题-如果有人通过Google来到这里,这就是我所做的:
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")