Open vivipure opened 2 years ago
JS 中迭代器是指包含 next 方法的对象, next 方法返回一个包含 value 和 done 键值的对象。
a.next() // {value: 1, done: false} a.next() // {value: 2, done: false} a.next() // {value: undefined, done: true}
生成器 是 一种类型的迭代器, 生成器函数返回一个生成器对象,这个对象是可迭代的
function * genFunction() { yield 1; } const g = genFunction() g.next() // value: 1, done: false g.next() // value: undefined , done: true
const customIterator = { [Symbol.iterator]: function * () { let i = 0; while(i++ < 10) { yield i } } }
利用 [Symbol.iterator] 我们可以实现直接的迭代对象,该对象可以通过 for ... in... 进行遍历
for ... in...
当我们在生成器对象next 方法传入参数时,当前的 yield 会变成我们传入的参数
function * listener() { while(true) { let msg = yield console.log(msg) } } let l = listener() l.next(1) // 1 l.next(2) // 2
纤程 是 更小的线程,在JS中,可以通过 generator 实现纤程的效果
TODO:demo
利用yield 结合 无限循环, 我们可以通过其他函数调用生成器函数,生产我们想要的值。实际上函数内部使用了 while(true) 的语法,但是执行线程不会进入死循环,十分的有趣。
while(true)
迭代器
JS 中迭代器是指包含 next 方法的对象, next 方法返回一个包含 value 和 done 键值的对象。
生成器
生成器 是 一种类型的迭代器, 生成器函数返回一个生成器对象,这个对象是可迭代的
自定义迭代器
利用 [Symbol.iterator] 我们可以实现直接的迭代对象,该对象可以通过
for ... in...
进行遍历yield 传值
当我们在生成器对象next 方法传入参数时,当前的 yield 会变成我们传入的参数
纤程
纤程 是 更小的线程,在JS中,可以通过 generator 实现纤程的效果
TODO:demo
惰性求值
利用yield 结合 无限循环, 我们可以通过其他函数调用生成器函数,生产我们想要的值。实际上函数内部使用了
while(true)
的语法,但是执行线程不会进入死循环,十分的有趣。