如何解决一个关于Javascript Iterator中执行顺序的问题
class iteratorWithoutG {
[Symbol.iterator]() {
let val = 0;
let threshold = 10;
return {
next() {
if(val >= threshold) {
console.log('iteratorWithoutG is finished');
return {
done: true,value: undefined
}
}
return {
done: false,value: vaL++
}
},return() {
return {
done: true,value: undefined
}
}
}
}
}
const iWithoutG = new iteratorWithoutG(10);
console.log([...iWithoutG]);
我正在学习有关 JS 迭代器的知识,我得到了这个:
iteratorWithoutG is finished
[ 0,1,2,3,4,5,6,7,8,9 ]
我想知道为什么在Array之前显示String,所以我添加了一些日志:
class iteratorWithoutG {
[Symbol.iterator]() {
let val = 0;
let threshold = 10;
return {
next() {
if(val >= threshold) {
console.log('iteratorWithoutG is finished');
console.log(Date.Now())
return {
done: true,value: (vaL++,Date.Now())
}
},value: undefined
}
}
}
}
}
这次我收到这条消息:
iteratorWithoutG is finished
1610466807875
[ 1610466807872,1610466807872,1610466807872 ]
所以字符串其实是在Array之后生成的,但是怎么显示在Array之前呢?? Array 是否存储在某个地方?
解决方法
这一行:
console.log([...iWithoutG]);
脱糖:
{
let arr = [];
for (const e of iWithoutG) {
arr.push(e);
}
console.log(arr);
}
这意味着首先创建并填充数组,然后才调用 console.log()
。因此迭代器在调用 console.log()
之前完成。
完整的事件顺序:
- 数组和迭代器已初始化。
- 调用迭代器的
next()
方法,直到它完成并将结果推送到数组中。 - 迭代器完成。
- 数组被记录到控制台。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。