声明没有赋值的变量有什么意义?
What is the point of declaring variables without assignment?
我正在研究一些CreateJS样本,其中一个我已经看到了这个,我想知道它对
有什么用(function() {
var c = createjs;
var a = function(blabla) {
this.blabla = blabla;
var p = Game.prototype;
p.a;
p.b;
p.c;
p.d;
/*
... 15 variables like that ...
*/
p.init = function(param) {
/* blabla */
}
/*
...
long code after that
...
*/
})();
它在github示例中,在/createjs/sandbox-master/PlanetaryGary
目录下,它的文件是js/Game.js
我是这段代码的原作者。这种模式可以归结为一个简单的哲学:好的代码是自文档化的。
对于那些进入这个盲区的人来说,有必要快速提一下,这些属性实际上并没有被命名为a,b,c等。还值得一提的是,它们通常被分配一个默认值(尽管在这种特殊情况下没有)。
前面的变量声明显式地定义了与"类"相关联的字段。这允许开发人员从上到下进行扫描,并在查看操作它的方法之前建立类操作的数据的心理模型。
它提供了一个方便的、上下文相关的地方来钩住文档注释,尽管所引用的代码没有文档化。
/**
* Docs for firstName here.
**/
p.firstName = "default";
/**
* lastName docs.
**/
p.lastName = "default";
最后,我发现它鼓励采用更周到的方法来处理数据和文档。定义新属性的行为为查看现有属性和评估新字段的必要性提供了机会。我见过很多bug和糟糕的代码都是由于开发者随意地给类添加属性而导致的。
当您在代码的专用区域显式地定义新属性时,忘记记录新属性也要困难得多(并且更容易快速发现未记录的属性)。
在不知道太多关于某些Game
对象的字母数据成员的细节的情况下,以您所展示的方式提及p.a
, p.b
等是准确暴露变量p
结构的好方法。
在您共享的代码片段的控制流中,我们可以在对变量p
执行任何初始化或其他操作之前准确地看到它具有哪些字段。
对象p
有可能被赋值了getter并产生副作用:
Object.defineProperty(p, 'a', { get: function() {
window.universalConstant = 42;
return p._a;
});
可能,但不太可能。也许这是一种错误的文档尝试,就像@ paul建议的那样。
相关文章:
- 未设置变量的赋值| jQuery的作用是什么
- 什么's是编写内联赋值和检查PHP'逻辑'但是使用JavaScript
- 什么's具有fn's赋值运算符两侧的名称(一个对象fn)
- JavaScript - 这些值赋值(使用 |= 作为运算符)是什么意思
- 赋值表达式的标准格式是什么
- 使用Javascript,变量赋值上下文中的表达式与上下文外的表达式有什么区别
- 复合let/const赋值是什么意思
- 逗号在JavaScript中的赋值语句中起什么作用
- 给for循环的结束点赋值的优缺点是什么?
- 声明没有赋值的变量有什么意义?
- 当在node.js中给回调之外的变量赋值时会发生什么?
- JavaScript中赋值操作返回赋值的意图/想法是什么?
- 窗户怎么样?onload工作吗?在它上面调用函数和给它赋值有什么区别?
- 在JavaScript中给变量赋值时,使用命名函数的目的是什么?
- 将变量赋值给全局作用域有什么危险或好处吗?
- 将构造函数赋值给某物是什么意思?
- 将生命周期的公共成员赋值给变量与返回对象之间的区别是什么?
- 赋值语句周围的圆括号是做什么的?
- 使用Object.create()和使用赋值操作符有什么区别?
- 赋值给exports和module之间的区别是什么?