MST

星途 面试题库

面试题:JavaScript 生成器内存管理:生成器暂停时内存状态

在JavaScript中,当一个生成器函数暂停执行(通过yield关键字)时,其内部的局部变量和相关数据在内存中处于怎样的状态?请简要描述。
43.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

当生成器函数通过yield关键字暂停执行时:

  • 局部变量:生成器函数内部的局部变量会保持当前的值和状态。这意味着在暂停时,局部变量的值不会被重置或销毁,当生成器函数恢复执行(通过next()方法)时,这些局部变量会保持暂停前的值继续使用。例如:
function* myGenerator() {
    let num = 1;
    yield num;
    num++;
    yield num;
}
let gen = myGenerator();
console.log(gen.next().value); // 输出1
console.log(gen.next().value); // 输出2

在这个例子中,num变量在第一次yield暂停后,第二次恢复执行时其值是1,并在执行num++后,第二次yield时输出2,说明num的值在暂停期间得到了保留。

  • 相关数据:与生成器函数执行上下文相关的其他数据,如函数调用栈的状态(尽管生成器函数执行不是传统意义上的连续调用栈方式)、作用域链等也会被保留。生成器函数的执行上下文会被挂起,以便后续能够从暂停的位置继续执行,就像执行流程被冻结在yield语句处,等待next()方法触发恢复。