1.什么是迭代
 
从一个数据集合中按照一定的顺序,不断的取出数据的过程。
 
2.迭代和遍历有什么区别
 
迭代强调的是依次取出,不能确定取出的有多少,也不能保证把数据全部取完。 遍历则需要知道数组的长度,且一次性取出。
 
3.迭代器是什么?
 
对迭代过程的一种封装,通常封装为对象的数据形式,不同的语言中,表现出来的迭代形式也是不一样的。
 
4.迭代模式
 
一种设计模式,用于统一迭代的过程,并且会规范代器的规格
 
js迭代器满足的条件:
 
1.迭代器有得到数据集合中下一个数据的能力 2.判断是否有后续数据的能力 js中迭代器 :如果一个对象有next()方法,并且返回一个对象,就认为这个对象为迭代器
 
const obj 
= {
      next(){
           return {
               value 
: a   
               done 
: boolean 
           
}
       }
   }
 
定义一个数组,迭代这个数组里面的值。
 
const arr 
= [1,5,6,8,23,7,8];
const iterator 
= {  
      i 
: 0,
       next(){
           let result 
= {
               value 
: arr
[this.i
],
               done 
: this.i 
>= arr
.length
           
}
           this.i
++;
           return result
;
       }
   }
   console
.log(iterator
.next());
 
 当判断的值为 true 时,将取不到数据。 让迭代器自己取出数据
 
 let data 
= iterator
.next();
    while(!data
.done
){
         console
.log(data
.value
)
         data 
= iterator
.next()
     }
    console
.log("迭代完成")
 
 
自定义一个迭代器的函数.
 
const arr1 
= [7,2,7,5,38,44,534]
        const arr2 
= [33,86,754,83413,54,4,4]
        
        function createIterator(arr
){
            let i 
= 0;
            return {
                next(){
                    let result 
= {
                        value 
: arr
[i
],
                        done 
: i 
>= arr
.length
                    
}
                    i
++;
                    return result
;
                }
            }
        }
        const iter1 
= createIterator(arr1
)
        const iter2 
= createIterator(arr2
)
 
 
创建一个斐波那契数列的迭代器 1 1 2 3 5 8 13 21 34…
 
 function createFeiBoIterator(){
       let prev1 
= 1;
       let prev2 
= 1; 
       let n 
= 1;
       return {
           next(){
               let value
;  
               if(n
<=2){   
                   value 
= 1;
               }else{
                   value 
= prev1 
+ prev2
;
               }
               const result 
= {
                   value
,
                   done 
: false
               }
               prev2 
= prev1
;
               prev1 
= result
.value
;
               n
++;
               return result
;
           }
       }
   }
   const iterator 
= createFeiBoIterator();
 
 
ES6之后数组对象就已经有迭代的方法,可以直接使用. 在es6中,如果对象具有知名符号属性 Symbol.iterator,则表示对象可以使用迭代 
 
const arr 
= [55,52,44,742,75,1]
const iterator 
= arr
[Symbol
.iterator
](); 
 
 可迭代的对象,可以用 for of 来遍历。
 
const arr 
= [55,52,44,742,75,1]
	for(let item 
of arr
){
	    console
.log(item
)
	 }