javascript - for循环的语法有多严格

标签 javascript loops

所以我在编码方面有相当丰富的经验。我涉足 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/

相关文章:

javascript - TypeError:未定义不是函数 - Sails.js

javascript - 使用鼠标光标更改元素位置

javascript - 如何以三元+箭头表示法插入 "for"

c - 二维数组中的元素丢失了吗?

javascript - 缓存名称未显示在缓存存储内

javascript - 如何重命名克隆表单中的所有 id (javascript)?

python - 循环标记多个轴

php - 限制PHP中关键字的数量

java - 标签多个

javascript - 使用 setTimeout 在自身内部调用函数