如何在javascript中执行for循环

How are for loops executed in javascript?

本文关键字:执行 for 循环 javascript      更新时间:2023-09-26

我不知道如何最好地处理JavaScript中的for循环。希望对for循环的理解将有助于阐明其他类型的循环。

示例代码

for (var i=0; i < 10; i=i+1) {
    document.write("This is number " + i);
}

我的理解是,当i初始化时,它以0的值开始,然后根据条件< 10进行评估。如果小于 10 ,则执行语句document.write("This is number + i);执行前一条语句后,将下一个值递增 1

我咨询过的指南:

  1. http://www.functionx.com/javascript/Lesson11.htm
  2. http://www.cs.brown.edu/courses/bridge/1998/res/javascript/javascript-tutorial.html#10.1
  3. http://www.tizag.com/javascriptT/javascriptfor.php

现在,http://www.functionx.com/javascript/Lesson11.htm 的指南似乎另有指示,即

要执行此循环,需要检查"启动"条件。这通常是计数应开始的初始值。接下来,条件经过测试;此测试确定循环是否应继续。如果测试呈现一个真实的结果,然后使用表达式来修改执行循环和语句。声明发布后执行后,循环将重新启动。

抛出我的行是"如果测试呈现真实结果,则表达式用于修改循环并执行语句"。这似乎暗示,因为0小于10,所以修改了增量表达式,这将被0 + 1然后语句,例如 document.write被执行。

我的问题

解释for循环的正确方法是什么?我自己的理解正确吗?同样的理解是否适用于其他编程语言,例如.PHP Perl,Python等?

将 for 循环视为以下内容

for(initializers; condition; postexec) {
    execution
}
  1. 首次启动循环时,将运行代码var i = 0。这将初始化您将在循环中测试的变量

  2. 接下来,循环计算i < 10表达式。这将返回一个布尔值,该值在运行前 10 次为 true。当此表达式不断计算为 true 时,循环中的代码将运行。

    document.write("This is number " + i);

  3. 每次运行此代码后,都会执行循环i++的最后一部分。此示例中的此代码在每次执行后将 1 添加到 i

执行该代码后,检查循环的条件,重复步骤 2 和 3,直到最终条件为 false,在这种情况下,循环退出。

这是循环在您提到的语言中的工作方式。

让我们看一下 ECMAScript 规范中的相应部分:

生产
迭代语句for ( var 变量声明列表NoIn ;表达式 opt ; 表达式选择 ) 语句
评估如下:

1. Evaluate VariableDeclarationListNoIn.
2. Let V = empty.
3. Repeat
  a. If the first Expression is present, then
     i. Let testExprRef be the result of evaluating the first Expression.
     ii. If ToBoolean(GetValue(testExprRef)) is false, 
         return (normal, V, empty).
  b. Let stmt be the result of evaluating Statement.
  ...
  f. If the second Expression is present, then
     i. Let incExprRef be the result of evaluating the second Expression.
     ii. Call GetValue(incExprRef). (This value is not used.)

如您所见,在步骤 1 中,将评估变量赋值。在步骤3a中,测试条件。在步骤 3b 中,计算循环体,然后在步骤 3f 中计算第三个表达式。

因此,您对for循环的理解是正确的。


假设它在其他语言中的工作方式相同,因为for循环是编程语言中如此常见的语句(请注意,Python 没有这样的语句)。但是,如果您想绝对确定,最好也查阅他们的规格。

您引用的来源是错误的,我们可以证明这一点......

for 循环的基础有四个单独的块,可以执行:

为( initialise ; condition ; finishediteration ) { iteration }

幸运的是,我们可以在每个块中执行一个函数。因此,我们可以创建四个函数,当它们像这样执行时记录到控制台:

var initialise = function () { console.log("initialising"); i=0; }
var condition = function () { console.log("conditioning"); return i<5; }
var finishediteration = function () { console.log("finished an iteration"); i++; }
var doingiteration = function () { console.log("doing iteration when `i` is equal", i); }

然后我们可以运行以下命令,将上述函数放入每个块中:

for (initialise(); condition(); finishediteration()) {
    doingiteration();
}

卡布姆。工程。

如果您在Mac上使用Safari查看此页面,则可以AppleAlt + I并按顺序将上述两个片段复制到控制台中并查看结果。

编辑,额外的信息....

也。。。完成的迭代块是可选的。例如:

for (var i=0; i<10;) { 
    console.log(i); i++; 
};

确实有效。

第二个引用是错误的。 你的解释是正确的。

另一种思考方式,如果这对您有帮助:

var i = 0;
while (i < 10) {
    document.write("This is number " + i);
    i++;
}
这是

for语句语法:

for(initalize, condition, increment) {
    Do_some_things();
}

initalize Will 在for开始时只执行一次,然后执行Do_some_things();语句,当condition仍然true时,它将执行increment然后Do_some_things();。 如果 co condition false,则 for 将退出。

for (var i=0; i < 10; i=i+1) {
    document.write("This is number " + i);
}

var i=0将执行一次(启动)。 循环后总是检查i < 10条件。 i=i+1将在检查i < 10后执行,结果为 true。i 的值为:0, 1, 3, 4, 5, 6, 7, 8, 9(10 次循环)