所以我在编码方面有相当丰富的经验。我涉足 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 循环停止。 - 第三个是增量,它包含循环中要执行的最后一位代码,推而广之,是下一次条件检查之前执行的最后一件事。
问题
那么,我的问题是这些定义有多严格?
初始化的定义不允许太多。它只是说该行被执行一次,它在循环中的任何其他内容之前执行,并且它的范围仅限于循环。除了迭代变量之外,我想不出还有什么你想放在那个位置的。
但是另外两个呢?我见过条件只是一个变量的代码,只要它是正数(因为正数被当作 bool 值只是隐蔽为 true
),循环就会继续。
然后是增量,这似乎是这些部分中最松散的部分。它真的只是在代码中执行的最后一件事,还是明确需要迭代初始化中声明的变量?对于我熟悉的语言,它似乎是前者。
例如,我决定做一个非标准的 for 循环,我想出了这个例程:
var numbers = [0,1,2,3,4,5,6,7,8,9];
for(var i = 0;
numbers.length;
console.log(numbers.pop())) {}
它的运行完全符合我的预期:它按降序在控制台中输出数字数组的每个成员,之后留下一个空数字数组,它基本上是使用一个空的 for 循环完成的。
结束
那么我的假设是否正确?如果是这样,除了我在这个问题的顶部写的格式(可能更接近第二种格式)之外,是否有任何实际应用可以使用 for 循环?
最佳答案
首先,你给一个数组
var numbers = [0,1,2,3,4,5,6,7,8,9];
下面的代码是正确的 for 循环。
for(var i = 0;
numbers.length;
console.log(numbers.pop())) {}
Javascript 是这样定义的
for ([initialization]; [condition]; [final-expression])
statement
对于你来说,代码初始化是'var i = 0',并在循环开始时执行一次。
条件为'numbers.length',值为10。当数字不为0时,Javascript会将其转换为 bool 值true。所以条件为真。
最终表达式是“console.log(numbers.pop())”。当执行 'numbers.pop()' 时,numbers.length 变为 9。但它仍然是 true。
第二次,condition 会再次返回 true。 final-expression 也是 execute。
直到 numbers.length 变为 0,Javascript 将其转换为 boolean false。循环将结束。
关于javascript - for循环的语法有多严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31590466/