Appearance
迭代器iterator
迭代有重复的意思。 可迭代的对象
- 实现了
[Symbol.iterator]方法 - 这个方法返回一个迭代器
迭代器
- 是一个有 next () 方法的普通对象
- 用来一步步遍历数据
- 每次调用
next()得到{ value, done }可迭代对象通过 [Symbol.iterator] 方法,生成一个迭代器。 迭代器才是真正负责一步步遍历的工具。
总结
- 可迭代对象:能被遍历的东西(书)
- [Symbol.iterator]:方法,用来生成迭代器(拿书签)
- 迭代器:真正执行遍历的工具(书签) 提前终止迭代器是在迭代器内部使用return方法
javascript
class Counter {
constructor(limit) {
this.limit = limit
}
[Symbol.iterator]() {
let count = 1
let limit = this.limit
return {
next() {
if (count <= limit) {
return { done: false, value: count++ }
} else {
return { done: true }
}
},
return() {
console.log('提前退出')
return { done: true }
}
}
}
}
let counter = new Counter(3)
for (let i of counter) {
if (i === 2) break
console.log(i)
} //输出 1 提前退出
//新的一个迭代器
for (let i of counter) console.log(i) //输出 1 2 3