为什么这么多开发人员用这种方式写逗号?
var npm = module.exports = new EventEmitter
, config = require("./lib/config")
, set = require("./lib/utils/set");
不是这样吗?
var npm = module.exports = new EventEmitter,
config = require("./lib/config"),
set = require("./lib/utils/set");
答案 0 :(得分:7)
他们在行的开头用“,”编写它们,以便更容易维护代码(添加行或删除/注释掉行)。
鉴于此:
var npm = module.exports = new EventEmitter
, config = require("./lib/config")
, set = require("./lib/utils/set");
这样做更干净,更容易:
var npm = module.exports = new EventEmitter
// , config = require("./lib/config")
, set = require("./lib/utils/set");
以及添加这样的新行:
var npm = module.exports = new EventEmitter
, config = require("./lib/config")
, anothervalue = require("./lib/aval")
, anothervalue2 = require("./lib/aval2")
, set = require("./lib/utils/set");
答案 1 :(得分:1)
我之前从未在JS中看到过这种模式,所以我不确定是否有许多开发人员使用它,但我猜他们会这样做,所以变量名称是对齐的,以强调var
实际上在示例代码中定义了三个变量。
如果是这种情况,那么只使用var
三次会更清楚(并且不那么奇怪):
var npm = module.exports = new EventEmitter;
var config = require("./lib/config");
var set = require("./lib/utils/set");
答案 2 :(得分:1)
这严格来说是程序员特定的语法偏好。我知道很多DBA都喜欢这种方法,而我更喜欢自己的尾随逗号。除了个人偏好/教育之外,这并没有真正的区别。
答案 3 :(得分:1)
编辑2:以上问题促使我划伤了一段困扰我的痒。经过相当多的反复思考后,我为引导逗号提出了一个很好的理由:很容易发现缺少逗号。这是一个可能令人讨厌的错误来源,因为编译器只会添加一个分号,而不是抱怨,因此会非常显着地改变含义:
var a = foo(),
b = bar() // Oops...
c = baz(); // Ouch!
第三行不再在当前范围内初始化新变量。它分配给外部作用域中的现有变量,或者如果没有,则初始化新的全局变量。
这并不能解释在JSON中使用前导逗号。也许它只是由菲亚特继承。
尽管如此,我仍然赞成单独的声明,这使得它简单而安全。
我会为了后代留下我的咆哮。
我同意它到处都是。几乎每一个我读过的第二个库都使用这个约定。坦率地说,我不明白。
尾随逗号会使评论小组的最后一行感到尴尬......
var //a = foo(), easy
b = bar(),
c = baz();
var a = foo(),
b = bar()/*, awkward
c = baz()*/;
......而领先的逗号使得第一行和最后一行都很尴尬......
var /*a = foo() awkward
, */b = bar()
, c = baz();
var a = foo()
, b = bar()/* awkward
, c = baz()*/;
这是进步吗?
(当然可以通过观察分号是可选的来赢得一个便宜的点,但这只能以避免最佳实践为代价来实现平价。)
更糟糕的是,领先的逗号也用于JSON。这是由Express生成的package.json。
{
"name": "application-name"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"express": "2.5.10"
, "jade" : ">= 0.0.1"
}
}
这是一个PITA,因为大多数编辑都不喜欢让兄弟姐妹的线条彼此不同。请注意,组的第一行缩进多于以下行。
使用引人注目的咒语使我感到毫无意义的影响,导致问题而不解决任何问题。我能想到的唯一一个有任何优点的论点就是领先的逗号相互排列;不太引人注目。
幸运的是,CoffeeScript正在接管世界,这使得这个问题没有实际意义(它甚至使配置失败了JSON。)
编辑:我忘了提到我实际上并不喜欢上述场景的尾随逗号。我认为宣布个体变量是最有意义的。它干净,规则,可以很容易地评论出单个项目。
var a = foo();
var b = bar();
var c = baz();
答案 4 :(得分:0)
var npm = module.exports = new EventEmitter
看到额外的“//”...您必须在末尾的现有行添加“//”并将其添加到下一行......
config = require("./lib/config") // ,
//anothervalue = require("./lib/aval"),
//anothervalue2 = require("./lib/aval2"),
set = require("./lib/utils/set");