深入生成器函数的底层原理
分析执行上下文
生成器函数本质上还是一个_函数_,所以它的执行离不开 执行上下文
function* generator() {console.log("status1");yield "hello";console.log("status2");yield "world";}
let gen = generator();
let one = gen.next();
1. 我们试着分析在执行gen = generator()
这句代码前的执行上下文状态:
此时执行上下文栈(后面统称ECS) 中的_栈顶_是 全局执行上下文
该上下文中, 全局对象
(window) 上保存了 generator
函数对象。
gen , one 是 let
声明所以在 词法环境中_未进行初始化_
2. 当执行 gen = generator()
时 , 创建 generator
函数的执行上下文: