如何在javascript中执行for循环
How are for loops executed in javascript?
我不知道如何最好地处理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
。
我咨询过的指南:
- http://www.functionx.com/javascript/Lesson11.htm
- http://www.cs.brown.edu/courses/bridge/1998/res/javascript/javascript-tutorial.html#10.1
- 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
}
首次启动循环时,将运行代码
var i = 0
。这将初始化您将在循环中测试的变量接下来,循环计算
i < 10
表达式。这将返回一个布尔值,该值在运行前 10 次为 true。当此表达式不断计算为 true 时,循环中的代码将运行。document.write("This is number " + i);
每次运行此代码后,都会执行循环
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 次循环)
- 如何在Javascript中延迟for循环执行
- 我将如何在 for 循环中执行此操作
- for 循环/递归中的执行顺序
- for 循环中的 if 语句都执行,而不仅仅是一个
- jQuery Transit动画未在for循环中正确执行
- 如何使用$q promise同步执行FOR LOOP
- JavaScript For Loop - 执行终止条件
- 如何在 for 循环内的回调完成后执行函数
- 同步 JavaScript 调用节点 js- 执行 GET in for 循环
- 如何在javascript中执行for循环
- for 循环元素的执行时间比内部 AJAX 调用可以响应的要快
- Javascript:for 循环似乎在执行代码之前拆分函数
- 在光标上执行 for Each 函数时出现更多错误
- 执行for循环将另一个对象添加到Javascript中的作用域链中
- Javascript只执行for语句的第一次迭代
- 再次继续执行for循环项
- 不能在vue.js中执行for循环
- 在dom元素上执行For循环
- 如何在函数内部(在函数上)执行for循环?
- 在javascript中执行for循环失败