所以我在编码方面有相当多的经验。我已经涉足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())) {}
它完全按照我的预期运行:它以降序输出控制台中数字数组的每个成员,之后留下一个空数字数组,并且使用基本上为空的for循环完成它。 / p>
我的假设是否正确?如果是这样的话,是否有任何实际的应用程序以一种格式使用for-loop,而不是我在这个问题的顶部写的那种格式(可能更接近第二种格式)?
答案 0 :(得分:1)
首先,你给出一个数组
var numbers = [0,1,2,3,4,5,6,7,8,9];
以下代码是正确的循环。
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会将其转换为布尔值true。条件成真。
最终表达式是'console.log(numbers.pop())'。执行'numbers.pop()'时,numbers.length更改为9.但它仍然是真的。
第二次,条件将再次返回true。最终表达式也是执行。
在numbers.length变为0之前,Javascript将其转换为布尔值false。循环结束。
答案 1 :(得分:0)
for (var i=0, j=1; i < 10; i++)
Here's an answer提供了一种很好的非循环循环方式,并附带警告,请参阅链接。
var list = [{a:1,b:2}, {a:3,b:5}, {a:8,b:2}, {a:4,b:1}, {a:0,b:8}];
for (var i=0, item; item = list[i]; i++) {
// Look no need to do list[i] in the body of the loop
console.log("Looping: index ", i, "item" + item);
}
答案 2 :(得分:0)
在大多数语言中,for循环的基本语法是这样的:
for(initialization; condition; iteration) {
/*Code to be executed*/
}
这两个都是通常的表达式,你可以在这里使用任何有效的表达式:
for(
var i=arr.length, othercond=true;
i;
othercond?i--:i++, console.log(i),updateothercond()
);