【发布时间】:2018-03-24 18:27:18
【问题描述】:
这篇文章是这篇文章的简化版:
What is the exact order of execution of Javascript's for loop?
我对为什么在使用 for 循环时总是感到困惑非常感兴趣。我想了解如何在后台执行 for 循环。
for (let i = 0; i < 10; i++) {
alert(i);
};
因此,据我了解,这是我所理解的执行此类操作的顺序:
1) 引擎初始化i = 0
2) 引擎检查i < 10
3) 引擎从包含 for 语句的括号中弹出
4) 引擎为此迭代执行循环内的代码
5) 引擎弹回括号内递增i,
6) 从第 2 步开始重复。
我想我对第 3 步感到最困惑。引擎是否真的跳出“for”循环来执行块内的代码?
据我了解,JavaScript 是单线程的,只能同步运行,所以我有点困惑,在 'for' 语句中间,引擎如何保持 'for' 的状态在执行块中的代码时的内存.... 除非'for'循环中的三个条件中的每一个都是它们自己独立的命令,可以在继续执行之前执行和完成块。
我什至不确定我是否正确地问了这个问题,我对编程还是比较陌生,我现在只知道 vanilla JS ......下个月是我进入 node 的时候;)
想通了: Click for an image of my breakpoint placement
我了解到顺序是这样的:
1)var i初始化为0
2) var i 被检查为真
3) 如果为真,则执行代码,
4) 一旦执行完成,i 就会递增
5) 加一,i 被检查为真
6) 重复步骤 3 - 5,直到 i 为假
7) 迭代完成。
谢谢大家。 Chrome 调试器比我想象的要强大得多!
【问题讨论】:
-
除了从括号中弹出而是进入下一行你的问题到底是什么?
-
我不知道你所说的“弹出”是什么意思。括号仅与代码的语法结构有关,与实际执行的内容无关。 “'for'循环中的三个条件都是各自独立的命令,可以执行”切中要害。
-
在这种情况下,
i的范围在花括号块内。顺便说一句,如果您使用旧的var关键字,那么如果for循环周围没有函数,那么i就在周围函数或窗口的范围内 -
循环头中的三个表达式中的每一个实际上都是同步的“小块”代码。像其他所有东西一样同步执行。在上下文(尤其是内联块)中“弹出”和“弹出”的心理模型对您没有帮助。
-
您了解
while循环的工作原理吗?这些可能更容易理解。另外,您知道引擎如何“保持”if语句之类的状态吗?
标签: javascript for-loop iteration javascript-engine