生成器函数
说生成器之前先讲迭代器,下面就是迭代器的简单范例,迭代器代表一个流程,迭代器的每次next()
调用,会返回迭代器流程现在的一个状态
function makeIterator(arr) {
let nextIndex = 0
// 返回一个迭代器对象
return {
// next()返回的结果对象
next: () => {
if (nextIndex < arr.length) {
return {
value: arr[nextIndex++],
done: false
}
} else {
return {
done: true
}
}
}
}
}
const it = makeIterator(['1', '2', '3'])
console.log(it.next().value)
console.log(it.next().value)
console.log(it.next().value)
console.log(it.next().done)
生成器语法上只是比普通function多一个*
号
function *iterator(arr) {
for (let i = 0; i < arr.length; i++) {
yield arr[i]
}
}
const gen = iterator(['1', '2', '3'])
console.log(gen.next().value)
console.log(gen.next().value)
console.log(gen.next().value)
console.log(gen.next().done)
生成器大大简化了迭代器繁琐的写法