如果你了解过ES6,那么你应该对for...of比较熟悉了,但是你知道for...of背后的原理是什么么吗?
for...of首先调用集合的[Symbol.Iterator]()方法,紧接着返回一个新的迭代器对象。迭代器对象可以是任意具有.next()方法的对象;for ...of循环将重复调用这个方法,每次循环调用一次。举个例子,下面是最简单的迭代器:

 var zerosForeverIterator={
      [Symbol.iterator]:function(){
        return this;
      },
      next:function(){
        return {done:false,value:0};
      }
   }

我们可以写一个简单的for...of循环然后按照下面的方法调用重写被迭代的对象:
首先是for...of循环:

for(VAR of ITERABLE){
//一些语句
}

然后是一个使用以下方法和少许临时变量实现的与之前大致相当的示例:

var $iterator=ITERABLE[Symbol.iterator()];
 var $result=$iterator.next();
 while(!$result.done){
  vAR=$result.value;
  //一些语句
  $result=$iterator.next();
 }

specialCoder
2.2k 声望168 粉丝

前端 设计 摄影 文学