天天看点

关于for of 循环和Iterator(遍历器)过程的分析

关于for of 循环和Iterator(遍历器)过程的分析

for of 循环是专门用来遍历带有遍历器接口的数据结构(带有遍历器的数据结构有数组、字符串、Set和Map结构、类数组对象等)。那么它的运行流程是什么呢?下面就举一个例子来研究一下。

let obj = {
            value:['a','b','c']
          }
          obj[Symbol.iterator] = function(){
            let i = 0;
            this.next = function(){
              if(i<this.value.length){
                 i++;
                 console.log(i);
                return {
                    value:this.value[i-1],
                    done:false
                }

              }
              return {done:true};
            }
            return this;
          }
          for(let k of obj){
            console.log(k);
          }
输入结果为
//1 a 2 b 3 c
           

上面的例子是一个对象部署了Iterator接口的例子,由上面可得出:

1.for of 循环首先调用Iterator方法获取返回对象,此对象不能省略,此对象必须有next方法,next方法返回一个包含value和done两个属性的对象;

2.调用Iterator返回的对象的next方法进入循环输出。

3.遇到返回为{done:true}时终止。

上面是自己用来理解for of循环便于记忆的,可能有不对之处,望理解。