js迭代器Iterator和生成器Generator深入理解

什么是迭代器

迭代器是一种特殊对象,它具有一些专门为迭代过程设计的专有接口,所有的迭代器对象都有一个next()方法,每次调用都返回一个结果对象,结果对象有两个属性:一个是value,表示下一个将要返回的值,另一个是done,它是一个布尔类型的值,当没有更多可返回数据时返回true。迭代器会保存一个内部指针,用来指向当前集合中值的位置,每调用一次next()方法,都会返回下一个可用值。

如果在最后一个值返回后再调用next()方法,那么返回的对象中属性done的值为true,属性value则包涵迭代器最终返回的值,这个返回值不是数据集的一部分,他与函数的返回值类似,是函数调用过程中最后一次给调用者传递信息的方法,如果没有相关数据则返回undefined。

下面用es5实现一变迭代器

function createIterator(arrs) {
    let i = 0
    return {
        next(){
            return {
               value: arrs[i],
               done: i++ >= arrs.length,
            }
        }
    }
}

 

什么是生成器

生成器是一种返回迭代器的函数,通过function 关键字后的星号(*)来表示,函数中会用到新的关键字yield。星号可以紧挨着function关键字,也可以在中间添加一个空格:

function *createIterator(){
  yield 1;
  yield 2;
  yield 3;
}

let iterator = createIteratorl()
console.log(iterator.next().value)  //1
console.log(iterator.next().value)  //2
console.log(iterator.next().value)  //3

 

在这个示例中,creatIterator()前的星号代表他是一个生成器,yield关键字也是ES6的新特性,可

你可能感兴趣的:(前端路漫漫,javascript)