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”来判断遍历结束的,就形成死循环,不断遍历第一个值。