浅析ES6中的iterator

1.iterator迭代器必须保证其遍历终止条件可控,否则会形成死循环
demo:

//会用到iterator接口的场合
//1.for...of循环
//2. ...解构表达式
const obj = {
  data:['iphone','hw','ganlex'],
};
obj[Symbol.iterator] = function(){
  let index = 0;
  const self = this;
  return {
    next(){
      return index<self.data.length?{ value:self.data[index],done:false }:{value:undefined,done:true};
    }
  };
}
for( let v of obj ){
  console.log( v );
}

因为在next方法里忘记index++,导致永远无法return "{value:undefined,done:true}",而for...of底层是通过“done:true”来判断遍历结束的,就形成死循环,不断遍历第一个值。

 

posted @ 2019-01-23 11:37  sophel  阅读(208)  评论(0编辑  收藏  举报