Generator
Generator是种特殊的函数,也可以叫做遍历器生成函数,其特殊在
- 在function后面有个星号
- 函数内部使用了yield关键字
function* A() {
yield 'a'
yield 'b'
return 'c'
}
var x = A()
Generator 函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象:遍历器对象。
遍历器对象部署了next方法,调用next方法会返回对象,对象具有两个属性。
x.next()
//{value: 'a'; done: false}
x.next()
//{value: 'b'; done: false}
x.next()
//{value: 'c'; done: true}
next
方法可以带一个参数,该参数就会被当作上一个yield
表达式的返回值。
相当于在外面改变了函数内部的行为。
function* A() {
let a = yield 1
console.log(a)
}
var x = A()
x.next()
x.next() // console.log(undefined)
// Compare
function* A() {
let a = yield 1
console.log(a)
}
var x = A()
x.next()
x.next(111) // console.log(111)
Iterator
本节引用于阮一峰文章
JavaScript 原有的表示“集合”的数据结构,主要是数组(Array
)和对象(Object
),ES6 又添加了Map
和Set
。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map
,Map
的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。