世界上正在使第二个参数返回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