使用逗号初始化/设置多个变量,没有“var”?

问题描述:

我见过的许多例子:使用逗号初始化/设置多个变量,没有“var”?

var foo = 1, bar = 2, baz = 3; 

但是,我可以这样做,而不var?例如:

// Declare at top of block for readability's sake: 
var foo, bar, baz; 
// ... stuff here ... 
// Later in script, I finally get around to initializing above vars: 
foo = 1, bar = 2, baz = 3; // Is using commas without var legal? 

换句话说,它是在合法JavaScript以具有线其中I初始化/设置多个瓦尔而不var关键字?我无法找到任何关于这是否被允许和/或得到很好支持的明确文件。

另一种方法是:

foo = 1; bar = 2; baz = 3; 

下面是促使我的问题的现实世界的情况:

for (var i = 0, l = haystack.length; i < l; i++) { ... } 

...我想移动varible delcaration内for循环到父块的顶层,如:

var i, l; 

// ... stuff here ... 

for (i = 0, l = haystack.length; i < l; i++) { ... } 

...但是我在陈述开始时只使用了var。在上述法律,还是应(?):(注意加分号)

var i, l; 

// ... stuff here ... 

for (i = 0; l = haystack.length; i < l; i++) { ... } 

在javascript中,你可以用逗号分隔的表达式,它们将执行左到右,返回值最右边的表达式

所以,你可以做到这一点,以下是合法的语法。

for (i = 0, l = haystack.length; i < l; i++) { ... } 

查看更多有关逗号操作符的位置:MDN Docs

+0

感谢本!在'i = 0'(而不是逗号)之后的'for'循环中使用分号会有什么问题吗?你通常使用逗号来设置多个变量(当不使用'var'关键字时),或者你更喜欢分号吗? – mhulse 2013-03-12 20:14:00

+1

我不认为这将在for循环中起作用。你可以在这里看到这些循环的规格:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for它看起来像你只能有3个语句。添加一个额外的语法将不是有效的。 – 2013-03-12 20:20:46

+0

啊,为了回答我自己的问题,在for循环的上下文中看起来好像是逗号:'for [[initialization]; [condition]; [final-expression])''。也可以通过[MDN文档](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for)找到。我认为这也是很好的知道:“[初始化]表达式的结果被丢弃”。 – mhulse 2013-03-12 20:22:20