1、iterator 遍历器 接口机制 为各种不同的数据结构提供一种访问机制,任何数据结构只要部署Iterator接口,就可以完成遍历操作,依次处理该数据结构的所有成员
-
拥有next方法用于依次遍历数组结构的成员;
-
每一次遍历返回的结果是一个对象{ done: false, value: xxx }
-
done:记录是否遍历完成
-
value::当前遍历的结果
拥有Symbol.iterator属性的数据结构(值),都为可遍历的。可以基于for of 循环处理
+数组 +类数组 + String + Set +Map + generator object
对象默认不具备Symbol.iterator, 属于不可遍历的数据结构
2、generator 生成器函数 符合可迭代和迭代器协议 (基于Iterator迭代器规范管理代码或者异步编程的)
生成器函数中this ---> window
【把它当成一个实例 proto】
生成器函数就是GeneratorFunction 的实例,生成器函数.**proto = GeneratorFunction.prototype**
({}).toString.call(生成器函数) => "[object GeneratorFunction]"
【把它当成一个构造函数 prototype】
生成器构造函数.prototype => 原型对象(空对象:可以自己设置内容)
生成器构造函数.prototype.**proto** === GeneratorFunction.prototype
创建生成器函数的实例:let func = 生成器函数();
生成器函数中的代码没有执行,
-
当后续执行实例.next()才会把这些代码执行,
-
并且每一次执行next遇到一个yield就结束 =》每一个执行返回的结果是符合迭代器规范的, { done: true/false , value: yield 后面的值或者是函数返回的值}