Penjana dan Iterator ES6: Panduan Pemaju
Walaupun mereka bekerja dengan baik bersama -sama, fungsi sebenar mereka boleh menjadi sedikit mengelirukan, jadi mari kita lihat lebih dekat.
mata utama
- ES6 menyediakan cara yang lebih bersih untuk menulis untuk gelung, menyediakan cara yang lebih seperti python untuk terus berinteraksi dengan unsur-unsur dalam dataset, menjadikan kod lebih mudah dibaca dan ditulis.
- Penjana dalam ES6 adalah fungsi yang mengingati keadaan antara setiap panggilan. Mereka boleh menjana nilai seterusnya dalam urutan setiap kali mereka dipanggil, dengan berkesan membuat lelaran tersuai.
- Kata kunci "hasil" dalam fungsi penjana adalah sama dengan "pulangan", tetapi ia mengekalkan keadaan fungsi, yang membolehkannya meneruskan pelaksanaan dari gangguan pada panggilan seterusnya.
- Walaupun penyemak imbas nod dan moden menyokong ciri -ciri ES6, pelayar yang lebih tua mungkin memerlukan penterjemah seperti Babel untuk menukar kod ES6 ke kod ECMAScript 5.
Penyesuaian adalah amalan biasa dalam pengaturcaraan, biasanya digunakan untuk gelung melalui satu set nilai, menukar setiap nilai, atau menggunakan atau menyimpannya dalam beberapa cara untuk kegunaan kemudian.
Di JavaScript, kami selalu mempunyai gelung seperti:
for (var i = 0; i < foo.length; i++) { // 对i执行某些操作 }
for (const i of foo) { // 对i执行某些操作 }
Katakan kita ingin mengetahui sama ada setiap nombor dalam array adalah nombor utama. Kita boleh melakukan ini dengan membuat fungsi yang melakukan ini. Ia mungkin kelihatan seperti ini:
function isPrime(number) { if (number <= 1) { return false; } else if (number === 2) { return true; } for (var i = 2; i < number; i++) { if (number % i === 0) { return false; break; } } return true; }
var possiblePrimes = [73, 6, 90, 19, 15]; var confirmedPrimes = []; for (var i = 0; i < possiblePrimes.length; i++) { if (isPrime(possiblePrimes[i])) { confirmedPrimes.push(possiblePrimes[i]); } } // confirmedPrimes现在是[73, 19]
const possiblePrimes = [73, 6, 90, 19, 15]; const confirmedPrimes = []; for (const i of possiblePrimes){ if ( isPrime(i) ){ confirmedPrimes.push(i); } } // confirmedPrimes现在是[73, 19]
Di sebalik tabir, lelaran ini mengambil kesempatan daripada kaedah simbol baru yang berkilat ES6 (). Kaedah ini bertanggungjawab untuk menerangkan lelaran dan apabila dipanggil, mengembalikan objek JavaScript yang mengandungi nilai seterusnya dalam gelung dan kunci yang dilakukan, yang benar atau palsu bergantung kepada sama ada gelung selesai.
Jika anda berminat dengan terperinci ini, anda boleh membaca postingan blog yang indah ini "Iterators Gonna Iterate" oleh Jake Archibald. Seperti yang kita menggali ke bahagian lain artikel ini: Penjana, ia juga memberi anda idea yang baik tentang apa yang berlaku di belakang tabir.
Generator
Penjana (juga dikenali sebagai "Kilang ITER") adalah jenis fungsi JavaScript baru yang digunakan untuk membuat lelaran tertentu. Mereka menyediakan anda dengan cara khas untuk gelung melalui kandungan.
Baiklah, jadi apa maksudnya? Mari kita lihat contoh. Katakan kita mahu fungsi, dan setiap kali kita memanggilnya, kita akan diberikan nombor perdana seterusnya:
for (var i = 0; i < foo.length; i++) { // 对i执行某些操作 }
Jika anda digunakan untuk JavaScript, beberapa perkara ini kelihatan seperti sihir, tetapi ia tidak terlalu buruk dalam realiti. Kami mempunyai asterisk yang pelik selepas fungsi kata kunci, tetapi itu hanya memberitahu JavaScript bahawa kita menentukan penjana.
Satu lagi bahagian pelik ialah kata kunci hasil. Ini sebenarnya apa penjana meludah apabila anda memanggilnya. Ia kira -kira bersamaan dengan kembali, tetapi ia mengekalkan keadaan fungsi dan bukannya mengubah segala -galanya setiap kali ia dipanggil. Ia "ingat" lokasinya semasa runtime, jadi pada masa akan datang anda memanggilnya, ia berterusan dari gangguan.
ini bermakna kita boleh melakukan ini:
for (const i of foo) { // 对i执行某些操作 }
Kemudian, setiap kali kita ingin mendapatkan - anda meneka - nombor perdana seterusnya, kita boleh menghubungi NextPrime:
function isPrime(number) { if (number <= 1) { return false; } else if (number === 2) { return true; } for (var i = 2; i < number; i++) { if (number % i === 0) { return false; break; } } return true; }
Anda juga boleh memanggil NextPrime.Next (), yang berguna apabila penjana anda tidak tak terhingga, kerana ia mengembalikan objek seperti ini:
var possiblePrimes = [73, 6, 90, 19, 15]; var confirmedPrimes = []; for (var i = 0; i < possiblePrimes.length; i++) { if (isPrime(possiblePrimes[i])) { confirmedPrimes.push(possiblePrimes[i]); } } // confirmedPrimes现在是[73, 19]
di sini, kunci yang dilakukan memberitahu anda sama ada fungsi itu telah menyelesaikan tugasnya. Dalam kes kita, fungsi kita tidak pernah berakhir, yang secara teorinya memberi kita semua nombor perdana sehingga tak terhingga (jika kita mempunyai memori komputer yang banyak).
Ia sejuk, jadi bolehkah saya menggunakan penjana dan iterators sekarang?
Walaupun ECMAScript 2015 telah selesai dan telah bertahun -tahun, sokongan penyemak imbas untuk ciri -cirinya (terutamanya penjana) jauh dari sempurna. Jika anda benar -benar mahu menggunakan ciri -ciri moden ini dan lain -lain, anda boleh melihat penterjemah seperti Babel dan Traceur yang akan menukar kod ECMAScript 2015 anda ke dalam kod ECMASCRIPT 5.
Terdapat juga banyak editor dalam talian yang menyokong ECMAScript 2015, atau memberi tumpuan khusus kepadanya, terutamanya Regenerator Facebook dan JS Bin. Jika anda hanya mahu bermain dan belajar bagaimana JavaScript ditulis sekarang, ini patut dilihat.
Kesimpulan
Generator dan Iterator menyediakan banyak fleksibiliti baru untuk pendekatan kami terhadap masalah JavaScript. Iterator membolehkan kami menulis untuk gelung dengan cara yang lebih python, yang bermaksud kod kami kelihatan lebih bersih dan mudah dibaca.
fungsi penjana membolehkan kita menulis fungsi yang ingat di mana mereka terakhir dilihat, dan boleh meneruskan pelaksanaan dari gangguan. Mereka juga boleh menjadi tak terhingga dari segi apa yang sebenarnya mereka ingat, yang sangat mudah dalam beberapa kes.
Sokongan untuk penjana dan iterator ini baik. Mereka disokong dalam nod dan dalam semua pelayar moden, kecuali untuk Internet Explorer. Jika anda perlu menyokong penyemak imbas yang lebih tua, cara terbaik ialah menggunakan penterjemah seperti Babel.
Soalan Lazim Mengenai ECMAScript 2015 Generators and Iterators (FAQ)
Apakah perbezaan antara pengaliran dan penjana dalam ECMAScript 2015?
Iterator dan penjana adalah kedua -dua ciri ECMAScript 2015 dan digunakan untuk memproses aliran data. Iterator adalah objek yang membolehkan pengaturcara meleleh melalui semua elemen dalam koleksi. Ia mempunyai kaedah seterusnya () yang mengembalikan item seterusnya dalam urutan. Sebaliknya, penjana adalah fungsi yang boleh berhenti separuh dan kemudian terus dari perhentian. Dalam erti kata lain, penjana kelihatan seperti fungsi, tetapi ia bertindak seperti iterator.
Bagaimana menggunakan kata kunci hasil dalam ECMAScript 2015?
Kata kunci hasil digunakan untuk ECMAScript 2015 Jeda dan memulihkan fungsi penjana (fungsi* atau fungsi penjana warisan). Hasil boleh mengembalikan nilai dari fungsi penjana. Nilai pulangan ini biasanya merupakan objek dengan dua sifat: nilai dan dilakukan. Atribut nilai adalah hasil mengira ungkapan hasil, dan dilakukan adalah nilai boolean yang menunjukkan sama ada penjana telah menghasilkan nilai terakhirnya.
Apakah tujuan kaedah seterusnya () dalam ECMAScript 2015?
Kaedah seterusnya () adalah bahagian utama protokol Iterator dalam ECMAScript 2015. Ia mengembalikan objek dengan dua sifat: nilai dan dilakukan. Atribut nilai adalah nilai seterusnya dalam urutan lelaran, dan dilakukan adalah nilai boolean yang menunjukkan sama ada lelaran selesai. Sekiranya dilakukan adalah benar, pengarah telah melebihi urutan urutan lelaran.Bagaimana menggunakan penjana untuk pengaturcaraan tak segerak dalam ECMAScript 2015?
Penjana dalam ECMAScript 2015 boleh digunakan untuk memudahkan pengaturcaraan asynchronous. Mereka boleh digunakan untuk menyekat pelaksanaan untuk menunggu operasi tak segerak untuk disiapkan tanpa menyekat keseluruhan program. Ini boleh menjadikan kod asynchronous kelihatan dan berkelakuan lebih seperti kod segerak, yang lebih mudah difahami dan alasan.
Apakah perbezaan antara untuk ... gelung dan untuk ... dalam gelung dalam ECMAScript 2015?
untuk ... gelung dalam Ecmascript 2015 digunakan untuk gelung melalui objek yang boleh dimakan seperti array, rentetan, peta, koleksi, dll. Ia memanggil cangkuk berulang adat menggunakan kenyataan yang akan dilaksanakan untuk nilai setiap atribut yang berbeza. Sebaliknya, untuk ... dalam gelung digunakan untuk gelung melalui sifat objek. Ia mengembalikan senarai kekunci untuk objek yang diulang.
Bagaimana untuk membuat iterator tersuai dalam ECMAScript 2015?
Dalam ECMAScript 2015, anda boleh membuat Iterator tersuai dengan menentukan objek dengan kaedah seterusnya (). Kaedah ini harus mengembalikan objek dengan dua sifat: nilai dan dilakukan. Atribut nilai adalah nilai seterusnya dalam urutan lelaran, dan dilakukan adalah nilai boolean yang menunjukkan sama ada lelaran selesai.
Apakah peranan simbol.iterator dalam ECMAScript 2015?
simbol.iterator adalah simbol terbina dalam khas dalam ECMAScript 2015. Ia digunakan untuk menentukan iterator lalai untuk objek tersebut. Apabila objek perlu diulang (contohnya pada permulaan untuk ... gelung), kaedah @@ iteratornya akan dipanggil tanpa sebarang argumen, dan pemula yang dikembalikan akan digunakan untuk mendapatkan nilai untuk berulang.
Bolehkah anda memberikan contoh fungsi penjana dalam ECMAScript 2015?
Sudah tentu, ini adalah contoh mudah fungsi penjana dalam ECMAScript 2015:
for (var i = 0; i < foo.length; i++) { // 对i执行某些操作 }
Dalam contoh ini, fungsi idmaker adalah penjana yang menghasilkan urutan nombor.
Bagaimana menggunakan kaedah dan penjana lempar () dalam ECMAScript 2015?
Kaedah lemparan () dalam ECMAScript 2015 boleh digunakan dalam penjana untuk memulihkan pelaksanaan fungsi penjana dan membuang kesilapan dari ekspresi hasil. Kaedah lemparan () boleh digunakan untuk mengendalikan kesilapan yang berlaku semasa pelaksanaan fungsi penjana.
Apakah kepentingan atribut yang dilakukan dalam Iterator ECMAScript 2015?
Hartanah yang dilakukanadalah nilai boolean yang dikembalikan oleh pengarah dalam ECMAScript 2015. Ia menunjukkan sama ada pengarah mempunyai lebih banyak nilai untuk kembali. Sekiranya dilakukan adalah benar, pengarah telah melebihi urutan urutan lelaran. Jika dilakukan adalah palsu, pemalar masih boleh menghasilkan lebih banyak nilai.
Atas ialah kandungan terperinci Penjana dan Iterator ES6: Panduan Pemaju. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing
