世界上正在使第二個參數返回true
?爲什麼'for(;;)'循環?
警告:它會無限循環,並可能會崩潰瀏覽器
for(;;){
//...
}
我完全期待不循環在所有...
但它正在運行,這會讓情況變得更糟,因爲只有在評估結果爲true
時才能運行,或者我錯過了什麼?
世界上正在使第二個參數返回true
?爲什麼'for(;;)'循環?
警告:它會無限循環,並可能會崩潰瀏覽器
for(;;){
//...
}
我完全期待不循環在所有...
但它正在運行,這會讓情況變得更糟,因爲只有在評估結果爲true
時才能運行,或者我錯過了什麼?
for ([initialization]; [condition]; [final-expression])
statement
[Initialization]
和[final-expression]
被直觀地不是必需的,減少了構建體對一個簡單的while
循環。但相關的部分是:
條件
的表達式以每次循環迭代之前進行評估。如果此表達式的計算結果爲true,則執行語句。 此條件測試是可選的。如果省略,則條件始終爲真。如果表達式計算結果爲false,則執行跳到for結構之後的第一個表達式。
(重點煤礦)
這似乎是一個完全任意JS語言的設計決策。如果這是我的語言,我可能會引發語法錯誤。
在一個好玩側面說明,for(;;){}
相當於while(true){}
,並且正好是4個字符短。我想知道是否縮小者利用這個!
很好的參考,我完全信任該網站的每一個字 – ajax333221 2012-03-30 03:33:44
因爲條件的缺乏總是評估爲真。
真的嗎?這是一種嗜好。它是如何在Java中無處不在的?正如'if()'中那樣? – 2012-03-30 03:23:39
@RobertHarvey,語法防止'if()'沒有條件,但它不能阻止'for()'。 – rid 2012-03-30 03:25:46
沒有什麼「使第二個參數返回true
」。沒有第二個參數。 ECMAScript Language Specification (ECMA-262 5th Edition)的12.6.3節說這個:
a。如果第一個表達式存在,則
i。假設testExprRef是評估第一個 表達式的結果。
ii。如果的GetValue(testExprRef)是假,收益率(
normal
,V,empty
)。
「第一表達」它指的是for
語句的分號之間的可選表達式。如果存在,程序執行上面引用的步驟(i)和(ii)。如果該表達式不存在,則該程序根本不執行for
語句算法的步驟(i)和(ii)。
如果完全沒有條件,for循環會一直運行,直到你打破它爲止。這與C相同。 – 2012-03-30 03:21:10
請參閱http://stackoverflow.com/questions/4894120/special-for-loop-syntax/4894256#4894256 - 在Java和JavaScript中與在C和C++中一樣。 – paxdiablo 2012-03-30 03:25:22