【发布时间】:2015-10-13 22:36:24
【问题描述】:
所以我在编码方面有相当丰富的经验。我曾涉足 Basic、HTML、Javascript、C 和 C++,尽管我最近使用的是 HTML 和 Javascript。
我非常熟悉 for 循环。我已经多次使用它来遍历数组、操作递归函数等。我知道它的作用以及如何使用它,但我的问题是 它是如何工作的。
前提
在大多数语言中,for 循环的基本语法如下:
var upperLimit = 10;
for(var i = 0; i < upperLimit; i++) {
/*Code to be executed*/
console.log(i);
}
在 Javascript 中,这将在控制台中输出从 0 到 9 的数字。
我知道括号包含 3 个部分,每个部分用分号分隔。
- 首先是初始化,它通常设置用于循环语句的变量。
- 第二个是条件,它在大括号之间的任何代码执行之前运行。如果结果为
True,则执行代码。否则,for 循环将停止。 - 第三个是增量,它包含要在循环中执行的最后一位代码,并且通过扩展,是在下一次条件检查之前执行的最后一件事。
问题
那么,我的问题是这些定义有多严格?
初始化的定义不允许太多。它只是说该行执行一次,它在循环中的任何其他内容之前执行,并且它的范围仅限于循环。除了迭代变量之外,我想不出你还想放在那个位置上。
但是另外两个呢?我见过条件只是一个变量的代码,只要它是正数(因为正数被视为布尔值只是转换为true),循环就会继续。
然后是增量,这似乎是这些部分中最松散的。它真的只是在代码中执行的最后一件事,还是明确需要迭代初始化中声明的变量?对于我熟悉的语言来说,似乎是前者。
例如,我决定做一个非标准的for循环,我想出了这个例程:
var numbers = [0,1,2,3,4,5,6,7,8,9];
for(var i = 0;
numbers.length;
console.log(numbers.pop())) {}
它完全按照我的预期运行:它在控制台中按降序输出 numbers 数组的每个成员,然后留下一个空 numbers 数组,它使用基本上是一个空的 for 循环来完成。
结束
那么我的假设是否正确?如果是这样,除了我在这个问题顶部写的格式(可能更接近第二种格式)之外,还有其他格式使用 for 循环的实际应用吗?
【问题讨论】:
-
第三部分不是增量,它是在每个循环结束时运行的指令,所以基本上你可以在这里放任何你想要的,只要它是一个指令(就像你在你的样品)。顺便说一句,这也适用于许多其他语言。如果你想了解它是如何工作的,我建议你学习一些编译基础知识。
-
你仍然遵循定义;要使用的变量、条件、指令
-
你的假设看起来大部分是正确的,但是有一个很好的理由不做你的非标准循环之类的事情:你在做什么或者为什么不明显。顺便说一句,您可以在第一部分放置多个变量 (
for(var a=0, b={}, c=[1,2]; ...) -
它的范围仅限于循环 -- 错误(在 JavaScript 中)。
-
为什么不直接阅读the manual?
标签: javascript loops