【问题标题】:Can someone explain me the Syntax of a loop like "for (;;)"有人能解释一下像“for (;;)”这样的循环的语法吗
【发布时间】:2020-09-09 11:56:24
【问题描述】:

有人可以解释一下for-loop 的语法,例如 "for (;;)" 我需要知道的是 for-loop 的标头是否像 "for (;;)" 是否拥有 empty-statements

我搜索了ECMAScript specification,如果for-loop's 标头中的所有可选表达式都像规范中的for (;;) 那样被跳过会发生什么,但我仍然没找到

即使规范没有提到 for-loopfor (;;) 循环/运行无限次,有人可以解释一下吗

我需要知道最后一件事为什么人们称for-loop 的标题是Expression's 我看到for 循环的语法允许我们编写像var i = 0 in the header of the for-loop 这样的声明,我明白了for-loops 语法允许我们在其标头中编写 semicolons ; 仅语句需要 semicolons 这是否意味着 for-loop's 标头中的所有语法都具有 Statements

【问题讨论】:

  • documentation at MDN 很清楚。通常,当项目是可选的时,编程文档会将项目放在括号 [] 中。
  • 一个“空”for 永远运行,因为中止条件仅在有一个时才被评估。没有条件检查 -> 没有理由停止。它在这里定义13.7.4.8 Runtime Semantics: ForBodyEvaluation ( test, increment, stmt, perIterationBindings, labelSet )
  • 这是否意味着 for-loop 标头中的所有语法都有 Statements 是的。声明是表达式,语句是表达式,任何需要评估的都是表达式。
  • @ScottMarcus 我不认为声明是Expressions
  • @Kevin 在技术上是正确的。但是,所有声明都包含表达式。

标签: javascript for-loop expression statements ecmascript-2020


【解决方案1】:

在标准 for 循环定义中,它会如下所示:

for (var i = 0; i < 5; i++)
{

   //Do something here

}

您的 声明 将 i 定义为 0 (var i = 0)。然后,for 循环每次运行时都会检查 条件/表达式,在此示例中检查 i 是否小于 5 (i &lt; 5)。

因此,为了解决您问题的第一部分,当您将 for 循环定义为 for(;;) 时,您只是定义了一个没有必须满足条件的循环。因此,它会永远继续运行/循环。可以这样做是因为 for 循环定义的所有部分都是可选的。所以,没有“empty-statements”。它只是定义没有可选参数的 for 循环。我们用分号填充它,以表示空参数之间的转换。

【讨论】:

  • for-loop 写成 for (;;) 时,这是否意味着 for 循环的标头包含所有 empty-statements
  • 没有“空语句”。实际上什么都没有。标题的所有三个部分都是可选的。
  • Andreas,经过进一步思考,我同意。我的意思是你可以称它为空语句,但这并不是真正发生的事情,因为所有参数都是可选的。
  • @Andreas 你应该阅读这个"empty-statement"
  • @Kevin 分号只是表明我们没有为参数传递任何值。它们本身并不是论据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多