JavaScript iterator Masalah dengan iterator?
ringa_lee
ringa_lee 2017-05-19 10:47:40
0
2
755

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.

ringa_lee
ringa_lee

ringa_lee

membalas semua(2)
黄舟

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_u1582

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次
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan