Perbincangan ringkas tentang penggunaan Generator dan Iterator dalam pengetahuan JavaScript_Basic

WBOY
Lepaskan: 2016-05-16 15:48:15
asal
1003 orang telah melayarinya

Apabila bercakap mengenai Penjana, semua orang akan membawa topik seperti tak segerak. Ini jelas disebabkan oleh sesuatu yang pelik. Iterator harus berkait rapat dengan Generator Menggunakan Generator untuk mengendalikan pemprosesan tak segerak mungkin sesuatu yang hanya beberapa pengaturcara C# akan fikirkan. Sudah tentu, penggunaan ini mempunyai set lengkap perkara, tetapi saya secara peribadi tidak menyukainya.
Jika anda perlu menyambungkan Penjana dengan asynchronous, satu-satunya perkara ialah masa panggilan seterusnya. Kerana seterusnya boleh dipanggil secara tak segerak, Penjana boleh disalahgunakan secara tak segerak.
Tetapi saya berpendapat bahawa walaupun kaedah seterusnya boleh dipanggil secara tidak segerak, cara yang betul untuk menggunakannya hendaklah serentak. Sekurang-kurangnya apabila tika Penjana digunakan dalam gelung for-of atau [...obj] pemusnahan, seterusnya dipanggil secara berterusan.
Selain isu segerak dan tak segerak seterusnya, parameter seterusnya juga menjadi masalah. Memandangkan parameter yang diluluskan apabila seterusnya dipanggil akan digunakan sebagai nilai pulangan pengendali hasil, penjana mempunyai cara yang lebih kaya untuk menggunakannya. Dalam Python awal, hasil adalah pernyataan dan bukannya pengendali, jadi tidak ada penggunaan sedemikian. Versi kemudian menggunakan hasil sebagai pengendali, jadi pelbagai perangkap muncul.
Apabila menggunakan contoh Generator sebagai Iterator, seterusnya tidak akan dipanggil secara tak segerak, dan seterusnya tidak akan dihantar dalam parameter. Saya rasa ini adalah penggunaan Generator yang betul. Atau secara terang-terangan, Generator digunakan untuk melaksanakan Iterator. Sekurang-kurangnya nama Generator tidak mempunyai makna lain. Berikut ialah contoh penggunaan:
Lari

<script>
var match = function * (pattern, string) {
 var regexp = new RegExp(pattern, 'g'); 
 for(let i; i = regexp.exec(string); yield i);
};

for(let i of match('a', 'abcabcabc')) {
 console.log(i);
}
</script>

Salin selepas log masuk

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!