Heim > Fragen und Antworten > Hauptteil
Siehe das Kapitel über Iteratoren auf MDN
https://developer.mozilla.org...Generator-Ausdrücke
Dann üben Sie alleine und finden Sie ein Problem.
//下面这个例子 ,想要实现打印3,4,5
var add=function(x,y){
var current=x;
return {
[Symbol.iterator]:function(){return this;},
next:function(){ return current++;}
}
}
var it=add(3,5);
console.log(it.next());
console.log(it.next());
console.log(it.next());
//结果 3 4 5
//注意与下面这种写法的区别
console.log(add(3,5).next()); //3
console.log(add(3,5).next()); //3
console.log(add(3,5).next()); //3
Der Code ist relativ einfach. Ich möchte fragen, warum ich bei der zweiten Methode keine Iterationen generieren kann, wenn ich ihr nicht die Methode add() zuweise. Nach meinem Verständnis entspricht add(3,5) in diesem Beispiel dem, aber das Ergebnis ist offensichtlich nicht der Fall.
黄舟2017-05-19 10:49:40
Iterator的遍历过程是这样的。
(1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
(2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
(3)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
(4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。
phpcn_u15822017-05-19 10:49:40
每次 执行add都会得到一个对象。这些对象各有一份互相独立的current。所以一次 it = add()
和多次 add()
是不等效的。
var it=add(3,5); // 对象1
console.log(it.next()); // 对象1 第1次
console.log(it.next());
console.log(it.next()); // 对象1 第3次
console.log(add(3,5).next()); // 对象2 第1次
console.log(add(3,5).next()); // 对象3 第1次