在声明一组变量而不是分号时使用逗号有什么区别和/或优点(如果有的话)。
例如:
var foo = 'bar', bar = 'foo';
相对
var foo = 'bar';
var bar = 'foo';
我知道,如果您var
在第一个示例中的第一个变量上指定关键字,它会在所有变量中持续存在,因此它们都会产生关于作用域的相同最终结果。这只是个人喜好,还是这样做对性能有好处?
在声明一组变量而不是分号时使用逗号有什么区别和/或优点(如果有的话)。
例如:
var foo = 'bar', bar = 'foo';
相对
var foo = 'bar';
var bar = 'foo';
我知道,如果您var
在第一个示例中的第一个变量上指定关键字,它会在所有变量中持续存在,因此它们都会产生关于作用域的相同最终结果。这只是个人喜好,还是这样做对性能有好处?
没有性能优势,只是个人选择和风格的问题。
第一个版本更简洁。
更新:
就通过网络传输的数据量而言,当然越少越好,但是您需要大量删除的var
声明才能看到真正的影响。
已经提到缩小是第一个示例将有助于更好地缩小的东西,但是,正如Daniel Vassallo在评论中指出的那样,一个好的缩小器无论如何都会自动为你做这件事,所以在这方面没有任何影响。
在阅读 Crockford 和其他人之后,我开始专门用逗号链接我的变量。后来,我真的对 Chrome DevTools 调试器感到恼火,它不会停在带有逗号的变量定义处。对于调试器,用逗号链接的变量定义是单个语句,而多个 var 语句是调试器可以停止的多个语句。因此,我从以下位置切换回来:
var a = doSomethingA,
b = doSomethignB,
c = doSomethingC;
到:
var a = doSomethingA;
var b = doSomethignB;
var c = doSomethingC;
到目前为止,我发现第二个变体更简洁,更不用说它解决调试器问题的优势了。
“通过电线减少代码”的论点没有说服力,因为有缩小器。
我更喜欢这样的var-per-variable
符号:
var a = 2
var b = 3
因为另一种comma-instead-of-another-var
表示法有这三个缺点:
1.难以维护
考虑以下代码:
var a = 1,
b = mogrify(2),
c = 3
但是,嘿,mogrify 是做什么的?让我们打印 b 来找出:
var a = 1,
b = mogrify(2),
console.log(b)
c = 3
打破东西
2.难读
行乞中的 var 清楚地表明将启动一个新变量。
var get_all_unicorn_promise = db.get_all_unicorns((unicorn) => {
unicorn.legs.map((leg) => {
leg.log('yes')
})
}).sort(),
c = 3
到底在c = 3
那里做什么?
3.不一致
考虑一下:
var a = 1,
b = 2,
c = 3
随着var-per-variable
每一个声明遵循相同的结构。随着comma-instead-of-another-var
第一个变量比其他不同的方式申报。如果您决定将第一个变量移到 for 循环中,则必须将 var 添加到声明的中间
除了偏好之外,似乎大多数著名项目都使用该var-per-variable
符号
我同意其他回答者的意见,这主要是个人风格问题。但是为了在讨论中引入“权威”意见,Douglas Crockford在流行的 JSLint 工具的网站上是这样说的:
但是因为 JavaScript 没有块作用域,所以在函数顶部声明函数的所有变量是更明智的。建议每个函数使用一个 var 语句。这可以通过
onevar
选项强制执行。
正如其他人所指出的,这是一种风格偏好。JSLint可能会告诉您var
每个函数只有一个(如果您使用“Good Parts”)。因此,如果使用 JSLint 来检查您的代码(这不是一个坏主意,恕我直言),您最终会比后者更多地使用第一种格式。
另一方面,同一位作者Douglas Crockford说在他的编码约定中将每个变量放在自己的行中。因此var
,如果您使用 JSLint,您可能希望取消选中“每个功能一个”复选框。;-)