当前位置: 首页 > Web前端 > HTML

Iterator和Generator

时间:2023-03-29 11:48:38 HTML

IteratorIterator概念Iterator提供统一的接口机制,为各种数据结构提供统一的访问机制。定义一个Iterator就是给一个对象提供一个next()方法,每次调用next()都会返回一个result对象,它有两个属性,value代表当前值,done代表遍历是否结束。函数makeIterator(数组){让索引=0;return{next:function(){return(Array.length>index?{value:Array[index++]}:{done:true})}}}letiterator=makeIterator(['1','2'])控制台.log(迭代器.next());//{value:'1'}console.log(iterator.next());//{value:'2'}console.log(iterator.next());//{done:true}Iterator的作用:为各种数据结构提供统一方便的访问接口;使数据结构的成员按一定顺序排列;for...of消费ES6默认的Iterator接口提供了forof语句来遍历迭代器对象,我们使用上面创建的迭代器,使用forof语句遍历它:letiterator=makeIterator(['1','2'])for(letvalueofiterator){console.log(value);}//iteratorisnotiterable结果是一个错误说iteratorisnotiterable,这是为什么呢?ES6规定默认的Iterator接口部署在数据结构的Symbol.iterator属性中。如果数据结构具有Symbol.iterator属性,则可以遍历该数据结构。我们按如下方式转换自定义makeIterator:constMakeIterator=(Array)=>({[Symbol.iterator](){letindex=0;return{next(){letlength=Array.length;if(index({[Symbol.iterator](){letindex=0;return{next(){letlength=Array.length;if(index{console.log(value)})//1//2//3Generator认识Generator//从概念上讲,Generator函数是ES6提供的一种异步编程解决方案。生成器函数是一个状态机,封装了多个内部状态;Generator函数也是一个遍历器对象生成函数,执行后返回一个遍历器对象。//形式上1.函数关键字和函数名之间有一个星号;2.函数体内部使用yield表达式来定义不同的内部状态。function*simpleGenerator(){yield1;yield2;}simpleGenerator()如上,我们创建了一个简单的Generator,我们带着两个问题进行探索:Generator函数运行后会发生什么?函数中的yield表达式有什么作用?function*simpleGenerator(){console.log('helloworld');产量1;yield2;}letgenerator=simpleGenerator();//simpleGenerator{