Voir le chapitre sur les itérateurs sur MDN
https://developer.mozilla.org...Expressions génératrices
Ensuite, entraînez-vous par vous-même et trouvez un problème.
//下面这个例子 ,想要实现打印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
Le code est relativement simple. Ce que je veux demander, c'est pourquoi dans la deuxième méthode, lorsque je ne lui attribue pas la méthode add(), je ne peux pas générer d'itérations. D'après ma compréhension, add(3,5) dans cet exemple lui est équivalent, mais le résultat n'est évidemment pas le cas.
Le processus de parcours d'Iterator est comme ça.
(1) Créez un objet pointeur pointant vers la position de départ de la structure de données actuelle. En d’autres termes, l’objet traverseur est essentiellement un objet pointeur.
(2) La première fois que vous appelez la méthode suivante de l'objet pointeur, vous pouvez pointer le pointeur vers le premier membre de la structure de données.
(3) Lorsque la méthode suivante de l'objet pointeur est appelée pour la deuxième fois, le pointeur pointe vers le deuxième membre de la structure de données.
(4) Continuez à appeler la méthode suivante de l'objet pointeur jusqu'à ce qu'il pointe vers la fin de la structure de données.
Chaque fois vous exécutez add, vous obtiendrez un objet. Chacun de ces objets a un courant indépendant. Donc
it = add()
和多次add()
une fois n'est pas équivalent.