cari

Rumah  >  Soal Jawab  >  teks badan

JavaScript iterator Masalah dengan iterator?

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_leeringa_lee2750 hari yang lalu739

membalas semua(2)saya akan balas

  • 黄舟

    黄舟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.

    balas
    0
  • phpcn_u1582

    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次

    balas
    0
  • Batalbalas