A: 这道题目还比较简单, 如果对 Javascript 稍微有一点深入的同学都会发现这道题目循环里面出现了闭包, 因此输出的数字是完全相同的, 最后的输出也是完全相同的....另外 setTimeout 实现了 (伪) 异步, 同时因为 let 将变量作用域进行了控制, 破坏了闭包结构, 因此会按照正常顺序输出...., 发现没有, 可以睡觉了
执行完毕
总结 1: 闭包
闭包什么的不想写了
总结 2: 关于事件循环/关于 macrotask 和 microtask
简介
一个事件循环 (EventLoop)...micro) 那这个 task 就可以被立即执行了
再来回顾下事件循环如何执行一个任务的流程
当执行栈 (call stack) 为空的时候, 开始依次执行:
把最早的任务 (task A) 放入任务队列..., 执行下一个 macrotask 中的任务 (再跳到第 2 步)
其他
当一个 task(在 macrotask 队列中) 正处于执行状态, 也可能会有新的事件被注册, 那就会有新的 task 被创建