JavaScript';对于';环
这篇文章是这篇文章的简化版: 我对为什么在使用for循环时总是感到困惑非常感兴趣。我想学习如何在引擎盖下执行for循环JavaScript';对于';环,javascript,for-loop,iteration,javascript-engine,Javascript,For Loop,Iteration,Javascript Engine,这篇文章是这篇文章的简化版: 我对为什么在使用for循环时总是感到困惑非常感兴趣。我想学习如何在引擎盖下执行for循环 for (let i = 0; i < 10; i++) { alert(i); }; for(设i=0;i
for (let i = 0; i < 10; i++) {
alert(i);
};
for(设i=0;i<10;i++){
警报(一);
};
从我的理解来看,这是我在理解像这样的事情的执行顺序时所得到的:
1) 发动机初始化i=0
2) 发动机检查i<10
3) 引擎从包含for语句的括号中弹出
4) 引擎在循环中执行此迭代的代码
5) 发动机弹回到括号中以增加i
6) 重复步骤2
我想我最困惑的是第三步。引擎是否真的跳出“for”循环来执行块中的代码
从我的理解来看,JavaScript是单线程的,只能同步运行,所以我有点困惑,在“OF”语句的中间,引擎可以在执行块中的代码的同时保持内存中的“AO”状态。除非“for”循环中的三个条件中的每一个都是它们各自独立的命令,这些命令可以在转到块中的命令之前执行并完成
我甚至不确定我问的这个问题是否正确,我对编程还是比较陌生的,我现在只知道vanilla JS。。。下个月是我进入node;) 找到答案: 我了解到顺序是这样的: 1)var i
初始化为0
2) var i
已检查truthy
3) 如果为true,则执行代码
4) 一旦执行完成,i
将递增
5) 一个递增的,i
被检查为真实值
6) 重复步骤3-5,直到i
失效
7) 迭代完成
谢谢大家。Chrome调试器比我想象的强大得多 (抱歉,没有足够的代表将此添加到评论中)
我建议使用浏览器调试功能。我不知道你用的是什么浏览器,但只要谷歌“用X浏览器调试JS”就可以了,还有很多教程
首先,创建一个简单的for循环htm文件。然后打开浏览器并初始化调试器。然后在浏览器中打开该文件。打开“源代码”部分,您的代码将可见。单击带有for循环的行并设置断点,还可以在变量上创建手表(如i)
然后重新加载htm文件,调试器将在断点处停止。然后逐步“进入”for循环。您将能够观察系统如何在代码中移动,查看每个步骤,可以观察变量的变化,希望这将让您了解它是如何工作的
这是理解您可能拥有的任何复杂代码并轻松调试错误的一种好方法。除了从括号中弹出外,您的问题是什么?我不知道您所说的“弹出”是什么意思。括号只与代码的语法结构有关,与实际执行的内容无关。“for”循环中的三个条件中的每一个都是它们各自独立的命令,可以执行”正是这一点。在这种情况下,
i
的范围在花括号块内。顺便说一句,如果您要使用旧的var
关键字,那么i
就在周围函数或窗口的范围内,如果for
循环周围没有函数,那么循环头中的三个表达式实际上都是同步的“小代码块”。与其他所有操作一样,同步执行。“弹出”上下文(尤其是内联块)的心理模型在这里对您没有帮助。您了解而循环是如何工作的吗?这些可能更容易理解。另外,您知道引擎如何“保持”类似于if
语句的状态吗?这!!这正是我需要的。我在for循环的每个步骤上都有断点。我了解到,首先,计数器变量被初始化,它基本上变成了一个三角形,检查truthy,执行代码,递增,检查truthy,执行代码,递增,等等……谢谢你的建议@马修沃克我很高兴能帮上忙。我发现它非常有用,尤其是在带有多个IF子句的嵌套for语句中。在每一步停下来,看看发生了什么,这会有帮助。。