美文网首页
javascript高级程序设计8

javascript高级程序设计8

作者: glassUp | 来源:发表于2022-03-26 18:43 被阅读0次

第七章 迭代器和生成器

一.迭代器(循环是迭代器的基础)
1.1 很多内置类型都实现了Iterable接口(满足可迭代协议),就是可迭代对象
字符串
数组
映射
集合
arguments对象
NodeList等Dom集合类型
实现Iterable接口的都暴露了一个属性作为“默认迭代器”,这个属性就是Symbol.iterator,这个默认迭代器属性引用了一个迭代器工厂函数,调用这个函数就会返回一个新的迭代器。

let str = 'abc';
console.log(str[Symbol.iterator]);     //返回了迭代器工厂函数
console.log(str[Symbol.iterator]());      //调用这个迭代器工厂函数,返回一个迭代器

怎么实现迭代的
迭代器API使用next()方法在可迭代对象中遍历数据,每next()一次,就会返回一个iteratorResult对象,这个对象里面包含了done和value这两个值,done就是做完了吗,返回true或者false,value就是返回的值。

let arr = ["foo","bar"];       //这是一个可迭代对象
let iter = arr[Symbol.iterator]();       //调用工厂函数生成迭代
console.log(iter.next());     //{done:"false",value:"foo"}
console.log(iter.next());      //{done:"false",value:"bar"}
console.log(iter.next());      //{done:"true",value:"undefined"}

在写代码过程中用不带这个显示调用迭代器函数工厂,理解原理就行了,循环中会自动用的

二.生成器
生成器的形式是一个函数,函数名称前面加上一个星号(*)表示是一个生成器
yield关键字可以让生成器停止和开始执行,也是生成器最有用的地方

function *fn(){
yield 1;
yield 2;
yield 3;
};
for(const x of fn()){
console.log(x)
}                                       //1    //2   //3    三次循环得出的结果

相关文章

网友评论

      本文标题:javascript高级程序设计8

      本文链接:https://www.haomeiwen.com/subject/wfxsjrtx.html