Siehe das Kapitel über Iteratoren auf MDN
https://developer.mozilla.org...Generator-Ausdrücke
Dann üben Sie alleine und finden Sie ein Problem.
//下面這個例子 ,想要實(shí)現(xiàn)打印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());
//結(jié)果 3 4 5
//注意與下面這種寫法的區(qū)別
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.
ringa_lee
Iterator的遍歷過程是這樣的。
(1)創(chuàng)建一個指針對象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說,遍歷器對象本質(zhì)上,就是一個指針對象。
(2)第一次調(diào)用指針對象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個成員。
(3)第二次調(diào)用指針對象的next方法,指針就指向數(shù)據(jù)結(jié)構(gòu)的第二個成員。
(4)不斷調(diào)用指針對象的next方法,直到它指向數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置。
每次 執(zhí)行add都會得到一個對象。這些對象各有一份互相獨(dú)立的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次