Terangkan pelbagai jenis penjana dalam JavaScript

PHPz
Lepaskan: 2023-09-01 13:33:14
ke hadapan
979 orang telah melayarinya

解释 JavaScript 中不同类型的生成器

Seperti yang kita sedia maklum, JavaScript ialah bahasa pengaturcaraan yang ringan, dan penjana telah diperkenalkan dalam ECMAScript 2015. Penjana ialah proses yang mempunyai banyak nilai keluaran dan boleh dihentikan dan dimulakan. Dalam JavaScript, penjana terdiri daripada fungsi penjana yang menghasilkan objek penjana yang boleh diubah.

Dalam artikel ini, kami akan membincangkan penjana dalam JavaScript dan pelbagai jenis penjana dalam JavaScript secara terperinci dengan sintaks dan contoh.

Pengenalan kepada Penjana dalam JavaScript

Fungsi generator adalah sama seperti fungsi biasa, tetapi dengan satu perbezaan, fungsi generator boleh disambung semula dan dijeda. Secara umumnya, dalam JavaScript, fungsi tidak berhenti sebaik sahaja ia dipanggil. Biasanya, konsep penjana muncul dalam pengaturcaraan tak segerak.

Sintaks fungsi penjana dalam JavaScript

Sekarang kita akan membincangkan sintaks fungsi penjana dalam JavaScript dan membandingkannya dengan fungsi biasa.

Sintaks

fungsi * digunakan untuk membina fungsi penjana dan kata kunci hasil digunakan untuk menjedanya.

function * genFunc() {
   yield 'Hello';
   yield 'World';
}
const g = genFunc(); // g is a generator
g.next(); // { value: 'Hello', done: false }
g.next(); // { value: 'World', done: false }
g.next(); // { value: undefined, done: true }
…
Salin selepas log masuk

Apabila fungsi penjana dipanggil buat kali pertama, tiada kodnya dijalankan, tetapi objek penjana dikembalikan. Nilai digunakan dengan memanggil kaedah next() penjana, yang menjalankan kod sehingga ia menemui kata kunci hasil, di mana ia berhenti seketika dan menunggu sehingga next() dipanggil semula.

Dalam kod di atas, selepas penyataan terakhir kami, panggilan berturut-turut ke g.next() hanya akan menghasilkan objek pulangan yang sama: {value: undefined, did: true}, kerana kami berada dalam 'dunia' kod kami ' Tiada apa-apa ditakrifkan selepas itu. fungsi genFunc().

Kata kunci

hasil menjeda pelaksanaan fungsi penjana dan memberikan nilai ungkapan yang mengikutinya kepada pemanggil penjana. Ia adalah setanding dengan versi berasaskan penjana kata kunci pulangan. Hanya boleh dipanggil terus daripada fungsi penjana yang mengandungi hasil.

Bandingkan dengan fungsi biasa

function regFunc() {
   console.log("Hello World");
}
// Hello World
Salin selepas log masuk

Dalam fungsi biasa kami tidak menggunakan fungsi "*" dan seperti yang anda lihat dalam contoh di atas ia juga tidak menggunakan fungsi hasil. Seperti yang kita bincangkan di atas, perbezaan utama antara fungsi biasa dan fungsi penjana ialah fungsi penjana boleh dihentikan dan dijeda. Jadi daripada contoh di atas, anda dapat melihat bahawa kami tidak memilih untuk menghentikannya, tetapi terus mencetak keseluruhan kenyataan, iaitu "Hello world".

Seperti yang telah kita fahami asas fungsi penjana, kini mari kita beralih kepada jenis fungsi penjana yang berbeza -

Penjana Biasa

Dalam penjana biasa, penjana bertindak sebagai lelaran, menjana nilai seterusnya selepas setiap panggilan kaedah seterusnya() dilaksanakan untuk menjana fungsi. Mari kita lihat contoh di mana kita akan menjana nombor satu demi satu sehingga akhir senarai.

function* generator_function(){
   for(var cur = 0 ; cur<7; cur++){
      yield cur;
   }
}
var object_generator = generator_function();
console.log(object_generator.next().value);
console.log(object_generator.next().value);
console.log(object_generator.next().value);
console.log(object_generator.next().value);
console.log(object_generator.next().value);
console.log(object_generator.next().value);
console.log(object_generator.next().value);
Salin selepas log masuk

Dalam kod di atas, kami telah mencipta fungsi generik biasa yang mengandungi kata kunci hasil dan memanggilnya beberapa kali menggunakan fungsi next().

Penjana dengan parameter

Penjana dengan parameter sedikit berbeza daripada penjana biasa, kali ini kita perlu lulus parameter menggunakan fungsi next() untuk menghantarnya ke fungsi penjana. Selain itu, setiap kali kami melepasi parameter, ia akan disimpan selepas kata kunci hasil dan bukan sebelum ini, kami akan memahami konsep ini dalam contoh seterusnya -

function* generator_function(){
   console.log("start of the function")
   temp = yield;
   console.log("This is the first value passed: " + temp)
   temp = yield;
   console.log("This is the second value passed: " + temp)
}
var object_generator = generator_function();
object_generator.next("This is not the first ");
object_generator.next("this is first");
object_generator.next("this is second");
object_generator.next();
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan fungsi penjana dan kali ini kami menyerahkan parameter kepadanya. Apabila kita memanggil objek untuk kali pertama, parameter yang diberikan tidak dicetak kerana ini dihantar sebelum kata kunci "hasil" dan kemudian selepas nilai yang dihantar disimpan dalam pembolehubah dan dicetak, nilai dicetak kali kedua Selepas itu, tiada apa yang berlaku kerana tiada keluaran pada masa ini.

Penjana dengan sifat objek

Penjana boleh digunakan sebagai objek dan apabila kita memanggilnya, ia hanya mengembalikan nilai yang diberikan kepadanya dan boleh dicetak. Untuk memahami konsep ini, mari kita lihat contoh.

function* generator_function(){
   yield "First value"
   yield "Second value"
   yield "Third value"
}
var object_generator = generator_function();
console.log(object_generator.next().value);
console.log(object_generator.next().value);
console.log(object_generator.next().value);
Salin selepas log masuk

Dalam kod di atas, pertama, kami mentakrifkan tiga ungkapan hasil, dan terdapat rentetan selepasnya Apabila kami memanggil penjana, rentetan selepasnya akan dikembalikan.

Terdapat juga jenis generator lain, seperti jenis pulangan, beberapa generator mengandungi generator lain di dalam, dll.

Kesimpulan

Dalam artikel itu, kami mengetahui bahawa fungsi penjana adalah sama dengan fungsi biasa, tetapi dengan satu perbezaan, fungsi penjana boleh disambung semula dan dijeda. Secara umumnya, dalam JavaScript, fungsi tidak berhenti sebaik sahaja ia dipanggil. Biasanya, konsep penjana muncul dalam pengaturcaraan tak segerak. Terdapat banyak jenis penjana, seperti penjana biasa dengan objek seperti parameter dan sifat, penjana yang mengandungi penjana lain, dll.

Atas ialah kandungan terperinci Terangkan pelbagai jenis penjana dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
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!