2017-10-12 71 views
0

这篇文章是怎么样的这个帖子的简化版本:JavaScript for'循环中的执行顺序是什么?

What is the exact order of execution of Javascript's for loop?

我在为什么与循环工作时我总是感到困惑超级感兴趣。我想知道如何在引擎盖下执行for循环。

for (let i = 0; i < 10; i++) { 
    alert(i); 
}; 
从我的理解

所以,这是据我得到的理解在其中执行这样的命令:)发动机初始化i = 0

2)

1发动机检查这i < 10

3)发动机弹出持有for语句

圆括号4)引擎执行)循环本次迭代

5)发动机弹回到括号递增i内的代码,

6重复从步骤2.

我想我对第3步最困惑。引擎是否实际弹出'for'循环来执行块内的代码?

从我的理解来看,JavaScript是单线程的,只能同步运行,所以我对'for'语句中间的一些问题感到困惑,引擎可以保持'for'在执行块中的代码时在内存中执行... 除非'for'循环中的三个条件中的每一个都是它们自己的独立命令,可以在继续执行块中的命令之前执行和完成这些命令。

我甚至不确定如果我正确地问这个问题,我还是比较新的编程,我只知道香草JS在这一点上...下个月是当我进入节点;)

想通了: Click for an image of my breakpoint placement

我已经了解到,顺序是这样的: 1)var i被初始化为0

2)var i被检查truthy

3)如果执行真实的,代码,

4)一旦执行结束,i递增

5)递增一,i被检查truthy

6)重复步骤3 - 5直到i是虚假的

7)迭代完成。

谢谢大家。 Chrome调试器比我想象的要强大得多!

+0

除了括号中的_pops而是正在转到下一行_什么是您的问题? – Lixus

+1

我不知道你是什么意思的“弹出”。括号只与代码的语法结构相关,与实际执行的内容无关。 “*'for'循环中的三个条件中的每一个都是它们自己的独立命令,它们可以被执行*”正好相反。 – Bergi

+0

在这种情况下'i'的范围在大括号内。顺便说一句,如果你使用旧的'var'关键字,那么'i'在周围的函数或窗口的范围内,如果'for'循环周围没有函数 –

回答

0

(对不起没有足够的代表把这个在评论)

我会建议使用浏览器的调试功能。我不知道你使用的是什么浏览器,但只是谷歌“用X浏览器调试JS”,并且有很多教程。

首先,创建一个简单的for循环htm文件。然后打开浏览器并初始化调试器。然后在浏览器中打开文件。打开“Sources”部分,你的代码将被视为可见的。点击带for循环的行并设置一个中断点,并在变量上创建监视(如i)。

然后重新加载htm文件,调试器将停止在断点上。然后“逐步进入”for循环。您将能够观察系统如何在代码中查看每一步,您可以观察变量的变化,并希望这会让您对它的工作方式有所了解。

这是了解任何复杂代码的好方法,并且可以轻松调试错误。

+0

这个!这正是我需要的。我在for循环的每一步都有断点。我已经了解到,首先,计数器变量被初始化,并且它基本上变成了检查真理,执行代码,递增,检查真值,执行代码,递增等的三角形。谢谢您的建议! – matthewvolk

+0

@matthewvolk以及我很高兴我能帮上忙。我发现它非常有用,尤其是在嵌套for语句和多个IF子句的情况下。它有助于停止每一步,看看发生了什么。 – esion