迭代器(Iterator)和生成器 (Generator)

什么是迭代器?

  • 迭代器是一种特殊的对象 (迭代器是一个对象)
  • 是一些专门为迭代过程设计的的专有接口 所有迭代器都next()方法
  • 每一次调用都返回一个结果对象有二个属性值 一般都猜得到有 value 表示返回下一个的对像,另一个是doen 是一个布尔值 当没有数据值返回true
  • 迭代器还会返回内部指针,会用来指向集合中的位置,每一次调用next()方法时 都会返回下一个可用的值,如果最后一个值返回在调用next()方法那么返回对象属性done的值为true 属性vauel则包含最终返回的值,
  • 这个返回值不是数据集的一部分,他与函数返回值类似,是函数调用过程中最后一次调用者传递信息的方法,如果没有相关数据就返回undefined

function creatInerator(items) {
  var i = 0;
  return {
    next() {
      var done = i >= items.length;
      var value = !done ? items[i++] : undefined;
      return {
        done,
        value,
      };
    },
  };
}
let iteror = creatInerator([1, 2, 3, 4]);

console.log(iteror.next()); //{ done: false, value: 1 }
console.log(iteror.next()); //{ done: false, value: 2 }
console.log(iteror.next()); //{ done: false, value: 3 }
console.log(iteror.next()); //{ done: false, value: 4 }

console.log(iteror.next()); //{ done: true, value: undefined }
console.log("=====================");
/**
 * 什么是生成器?
 *
 * 生成器是返回迭代器的函数,通过function 关键字后的(*)来表示 函数中会用到的关键字 yield
 * 星号可以紧挨着 function 关键字后面 也可以隔一个空格表示
 * 生成器跟普通函数调用一样,只不过返回是一个迭代器
 *
 */

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

let Iterator = createIterator();
console.log(Iterator.next()); //{ value: 1, done: false }
console.log(Iterator.next()); //{ value: 2, done: false }
console.log(Iterator.next()); //{ value: 3, done: false }
console.log(Iterator.next()); //{ value: undefined, done: true }

什么是迭代器?

  • 迭代器是一种特殊的对象 (迭代器是一个对象)
  • 是一些专门为迭代过程设计的的专有接口 所有迭代器都next()方法
  • 每一次调用都返回一个结果对象有二个属性值 一般都猜得到有 value 表示返回下一个的对像,另一个是doen 是一个布尔值 当没有数据值返回true
  • 迭代器还会返回内部指针,会用来指向集合中的位置,每一次调用next()方法时 都会返回下一个可用的值,如果最后一个值返回在调用next()方法那么返回对象属性done的值为true 属性vauel则包含最终返回的值,
  • 这个返回值不是数据集的一部分,他与函数返回值类似,是函数调用过程中最后一次调用者传递信息的方法,如果没有相关数据就返回undefined

function* createIterators(items) {
  for (let i = 0; i < items.length; i++) {
    yield items[i];
  }
}

let Iterators = createIterators([1, 2, { name: "自夏" }]);

console.log(Iterators.next()); //{ value: 1, done: false }
console.log(Iterators.next()); //{ value: 2, done: false }
console.log(Iterators.next()); //{ value: { name: '自夏' }, done: false }
console.log(Iterators.next()); //{ value: undefined, done: true }


/**
 * yidld 只能在生成器内部使用,在其他地方使用会抛出异常
 * 
 */
 function* createIteratorss(items) {
    
    items.forEach(item => {

        yield items; //SyntaxError: Unexpected identifier
    });

  }

  createIteratorss()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值