【发布时间】:2012-08-16 14:07:54
【问题描述】:
现在 PhpStorm 中内置的 JSHint 的检查功能让我了解了 JavaScript 幻数,我意识到这将使代码更清晰,从而避免使用它们。
我试过了:
var constants = {
millisecs: 1000,
secs: 60
};
还有这个:
var constants = function () {
this.millisecs = 1000;
this.getMillisecs = function () {
return this.millisecs;
};
};
JsHint 抱怨两者。
从this answer 获取解决方案虽然效果很好:
var constants = (function() {
var millisecs = 1000,
defaultMsgsPerSecond = 60;
this.getMillisecs = function() { return millisecs; };
this.getDefaultMsgsPerSecond = function() { return defaultMsgsPerSecond; };
})();
大概是因为关闭了。为什么这被接受了,而从另一个 SO 问题中提取的其他两个建议却没有?
编辑:虽然没有触发错误,但它实际上不起作用。说常量未定义是错误的。 JsFiddle.
澄清一下——“有效”是指“不会触发来自 JsHint 的警告”
【问题讨论】:
-
前两个代码示例中明显出现的一个问题,但在后一个代码示例中缺少的是,“常量”不是那么恒定 - 也就是说,可以稍后在代码中更改(使用
constants.millisecs = 100;). -
@penartur 让我印象深刻 - 工作示例立即调用自身,使其属性私有,因此只有两个 getter 被暴露?