Step3:Generator
Generator 是什么
**生成器(Generator)**对象是ES6中新增的语法,和Promise一样,都可以用来异步编程。但与Promise不同的是,它不是使用JS现有能力按照一定标准制定出来的,而是一种新型底层操作,async/await就是在它的基础上实现的。
generator对象是由generator function返回的,符合可迭代协议和迭代器协议。
generator function 可以在JS单线程的背景下,使JS的执行权与数据自由的游走在多个执行栈之间,实现协同开发编程,当项目调用generator function时,会在内部开辟一个单独的执行栈,在执行一个generator function 中,可以暂停执行,或去执行另一个generator function,而当前generator function并不会销毁,而是处于一种被暂停的状态,当执行权回来的时候,再继续执行。
可迭代协议和迭代器协议都是ES6的补充
迭代器(Iterator)
顾名思义,所谓迭代器对象就是满足迭代器协议的对象。
迭代器协议
迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值。使的迭代器对象拥有一个next()
对象,并有以下含义:
- next: 返回一个对象的无参函数,返回对象有两个属性:
- done(boolean)
- 如果迭代器已经经过了被迭代序列时为 true。这时value可能描述了该迭代器的返回值。
- 如果迭代器可以产生序列中的下一个值,则为false。这等于说done属性不指定。
- value
- 迭代器返回的任何 JavaScript 值。done为true时可省略。
- done(boolean)
为了加深一下理解,下面贴出
迭代器构建版本一:Iterator的源码实现
// 源码实现
function createIterator(items) {
var i = 0
return {
next: function() {
var done = (i >= items.length)
var value = !done ? items[i++] : undefined
return {
done: done,
value: value
}
}
}
}
// 应用
var iterator = createIterator([1, 2, 3])
console.