Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript';对于';环_Javascript_For Loop_Iteration_Javascript Engine - Fatal编程技术网

JavaScript';对于';环

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循环时总是感到困惑非常感兴趣。我想学习如何在引擎盖下执行for循环

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语句中。在每一步停下来,看看发生了什么,这会有帮助。。