iterator 和yield的关系

var obj={a:1,b:2};
obj[Symbol.iterator]=function(){
    var arr=Object.keys(obj);
    var me=this;
    return {
        index:0,
        next:function(){
            return {done:this.index>=arr.length,value:me[arr[this.index++]]};
        }
    }
}
obj[Symbol.iterator]=function* (){
    var me=this;
    var arr=Object.keys(this);
    var i=0;
    while(i<arr.length){
        yield this[arr[i]];
        i+=1;
    }
}
for(var i of obj){
    console.log(i);
}

可以知道Symbol.iterator是等价的 那么 这个是一个函数 返回一个对象 对象有next方法 yield其实就是返回一个新的遍历器的值 

原文地址:https://www.cnblogs.com/me-data/p/9876238.html