gpt4 book ai didi

javascript - Javascript for 循环的确切执行顺序是什么?

转载 作者:行者123 更新时间:2023-11-30 08:38:03 24 4
gpt4 key购买 nike

我对在 Codepen 中玩的特定 for 循环的确切执行顺序感到有点困惑。查看这两个循环,它们都做同样的事情:

var a = ['orange','apple']; 
for (var i=0; i<2;i++) {
alert(a[i]);
}

for (var j=0, fruit; fruit = a[j++];) {
alert(fruit);
}

您可以在此处查看实际效果:http://codepen.io/nickbarry/pen/MYNzLP/

第一个循环是编写 for 循环的标准、普通方式。正如预期的那样,它会提示“橙色”,然后是“苹果”。

我使用 MDN 的建议编写了第二个循环(在此处搜索“idiom”:https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)。

它有效,但我不太明白为什么。我对 for 循环的理解在某种程度上(不止一种方式?)显然是不正确的: * for 循环在第一次运行之前评估第二个表达式的真实性。所以看起来当 for 循环正在评估第二个表达式的真实性时,它应该在设置 fruit 的值之前增加 j。所以第一次通过循环时,fruit 应该等于“apple”。 * 并且循环应该只运行一次,因为在第一次通过之后,当它再次计算第二个表达式以查看它是否仍然为真时,它应该在将值返回给 fruit 之前再次递增 j,因为没有值在索引位置 2,它应该返回一个错误的结果,并退出循环。

我不明白到底发生了什么。 for 循环是否在计算第二个表达式之前运行一次?但这似乎是不可能的,因为如果发生这种情况,警报在第一次通过时不会发出任何警报,因为水果还没有值(value)。

此外,MDN 文章的作者似乎喜欢第二种编写循环的方式 - 有没有理由认为这种方式更好?它使用更少的字符,我想这很好。跳过 for 循环中的第三个表达式是否可以节省大量时间?或者它只是一种“它很酷,因为它很聪明”之类的东西?

最佳答案

for (var j=0, fruit; fruit = a[j++];) {
alert(fruit);
}

在伪代码中等于:

initialize j = 0 and fruit = undefined

assign fruit = a[j] (j = 0, fruit = 'orange')
j = j + 1 (j = 1)
check fruit for being truthy (true)

alert(fruit) ('orange')

assign fruit = a[j] (j = 1, fruit = 'apple')
j = j + 1 (j = 2)
check fruit for being truthy (true)

alert(fruit) ('apple')

assign fruit = a[j] (j = 2, fruit = undefined)
j = j + 1 (j = 3)
check fruit for being truthy (false)

exit loop

重要提示:

后缀一元 ++ 运算符的作用是:

  1. 我们返回变量的当前值
  2. 我们增加变量的值

Does skipping the third expression in the for loop save significant time?

它根本不保存任何东西

Also, the author of the MDN article seemed to like the second way of writing the loop - is there a reason that way is better?

无论如何也好不到哪里去。作者只是觉得它很酷,作者喜欢酷(而他们不是)。

关于javascript - Javascript for 循环的确切执行顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com