2013-03-12 43 views
1

我見過的許多例子:使用逗號初始化/設置多個變量,沒有「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++) { ... } 

回答

4

在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