Rumah > Soal Jawab > teks badan
Lihat bab tentang iterator di MDN
https://developer.mozilla.org...Ekspresi penjana
Kemudian amalkan sendiri dan cari masalah.
//下面这个例子 ,想要实现打印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
Kod ini agak mudah yang saya ingin tanyakan ialah mengapa dalam kaedah kedua, apabila saya tidak menetapkan kaedah add() kepadanya, saya tidak boleh menjana lelaran. Menurut pemahaman saya, add(3,5) dalam contoh ini adalah bersamaan dengannya, tetapi hasilnya jelas tidak begitu.
黄舟2017-05-19 10:49:40
Proses traversal Iterator adalah seperti ini.
(1) Cipta objek penunjuk yang menunjuk ke kedudukan permulaan struktur data semasa. Dalam erti kata lain, objek traverser pada dasarnya adalah objek penunjuk.
(2) Apabila kaedah seterusnya objek penunjuk dipanggil buat kali pertama, penunjuk boleh menunjuk kepada ahli pertama struktur data.
(3) Apabila kaedah seterusnya objek penunjuk dipanggil untuk kali kedua, penuding menghala ke ahli kedua struktur data.
(4) Teruskan memanggil kaedah seterusnya objek penunjuk sehingga ia menghala ke hujung struktur data.
phpcn_u15822017-05-19 10:49:40
Setiap kali anda melaksanakan tambah anda akan mendapat objek. Setiap objek ini mempunyai arus bebas. Jadi it = add()
和多次 add()
sekali tak setaraf.
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次