JavaScript中ES6迭代器未赋值的next()返回值是如何存储的?
问题解答
你提供的示例代码如下:
let numbers = [100,200,300]; let iter = numbers[Symbol.iterator](); iter.next(); // statement 1 iter.next(); // statement 2 console.log(iter.next()); // statement 3
针对你提出的问题,statement 1、statement 2中iter.next()返回的未被赋值的结果,JavaScript 并不会对其进行长期存储,这类未被引用的临时值会在表达式执行完成后直接被丢弃:
- 所有JS表达式执行后都会生成返回值,如果你没有把这个返回值赋值给变量、没有传入函数作为参数、也没有参与其他运算,它就会被标记为无引用的临时对象,马上会被垃圾回收机制清理,不会占用额外的持久内存。
- 数组迭代器内部仅会维护当前的遍历下标索引,不会存储历史
next()调用的返回结果,每次调用next()时只会根据当前下标生成对应{value: 遍历值, done: 遍历是否完成}格式的临时对象,没有被引用的临时对象不会被保留。
你给出的代码最终会打印{value: 300, done: false},也能验证迭代器仅记录遍历进度,不会留存之前的返回值。
内容的提问来源于stack exchange,提问作者Akhlesh Kumar
相关产品推荐
相关产品推荐

