关于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循环便于记忆的,可能有不对之处,望理解。