在JavaScript中,可以像这样声明多个变量:
var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;
...或者像这样:
var variable1 = "Hello, World!",
variable2 = "Testing...",
variable3 = 42;
一种方法比另一种更好/更快吗?
在JavaScript中,可以像这样声明多个变量:
var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;
...或者像这样:
var variable1 = "Hello, World!",
variable2 = "Testing...",
variable3 = 42;
一种方法比另一种更好/更快吗?
当前回答
虽然两者都是有效的,但使用第二种方法会使缺乏经验的开发人员不愿意到处放置var语句,从而导致提升问题。如果每个函数只有一个var,在函数的顶部,那么从整体上调试代码会更容易。这可能意味着声明变量的行不像某些人希望的那样显式。
我觉得这种权衡是值得的,如果这意味着让开发者不再在任何他们喜欢的地方使用“var”。
人们可能会抱怨JSLint,我也一样,但是很多JSLint并不是为了修复语言的问题,而是为了纠正编码员的坏习惯,从而防止他们编写的代码出现问题。因此:
在具有块作用域的语言中,通常建议在第一次使用变量的位置声明变量。但是因为JavaScript没有块作用域,所以更明智的做法是在函数的顶部声明函数的所有变量。建议每个函数使用一个var语句。”——http://www.jslint.com/lint.html范围
其他回答
ECMAScript 2015引入了解构赋值,效果非常好:
[a, b] = [1, 2]
A等于1 b等于2。
避免使用单语句版本(单var)的另一个原因是调试。如果在任何赋值行中抛出异常,堆栈跟踪只显示这一行。
如果使用逗号语法定义了10个变量,则无法直接知道哪个变量是罪魁祸首。
单个语句版本没有这种歧义。
可维护性问题可以很容易地通过一些格式化来解决,比如:
let
my_var1 = 'foo',
my_var2 = 'bar',
my_var3 = 'baz'
;
我严格按照个人喜好使用这种格式。当然,对于单个声明,或者它只是把工作搞砸的情况,我跳过了这种格式。
我唯一的,也是最重要的,逗号的用法是在for循环中:
for (var i = 0, n = a.length; i < n; i++) {
var e = a[i];
console.log(e);
}
我在JavaScript中查看了一下这个是否可以。
即使它是可行的,一个问题仍然是n是否对函数是局部的。
这验证了n是本地的:
a = [3, 5, 7, 11];
(function l () { for (var i = 0, n = a.length; i < n; i++) {
var e = a[i];
console.log(e);
}}) ();
console.log(typeof n == "undefined" ?
"as expected, n was local" : "oops, n was global");
在语言之间切换,我一时拿不准。
对于组织来说,每个作用域使用一个var语句是很常见的。所有“作用域”都遵循类似的模式,使代码更具可读性。此外,引擎会把它们都“吊”到顶部。因此,将声明放在一起可以更紧密地模拟实际发生的情况。