js的symbol中有个iterator迭代器,它也是 一个接口,它有三个作用:1.它可以为数据结构提供访问接口 2.可为数据有序排列 3.可用于for of循环和...rest参数,它的工作流程是:1.创建一个指针对象,指向数据结构中的起始位置 2.调用next方法指向下一个数据,直到指向的数据没有时,结束位置。
下面来看下代码
var arr=[1,4,5]
var iter=arr[Symbol.iterator]();
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
/*结果为{value:1,done:false}
{value:1,done:false}
{value:1,done:true}
{value:undefined,done:false}
*/
下面来模拟一下迭代器的工作流程
function iter(obj){
var i=0;
return {
next(){
let done=i<obj.length?false:true,
value=!done?obj[i++]:undefined
return{
value,
done
}
}
}
}
let it=iter(arr);
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())
//结果也和上面的一样