Di halaman ini saya menemukan tipe fungsi JavaScript baru:
// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13
function* fibonacci() { // !!! this is the interesting line !!!
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Saya sudah tahu apa yield
, let
dan [?,?]=[?,?]
melakukan , tetapi tidak tahu apa yang function*
dimaksudkan. Apa itu?
PS jangan repot-repot mencoba Google, tidak mungkin untuk mencari ekspresi dengan tanda bintang ( mereka digunakan sebagai pengganti ).
javascript
function
ecmascript-6
string QNA
sumber
sumber
function*
sintaks didukung di Firefox sejak v26: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Versi yang lebih lama menggunakan sintaks yang berbeda.*
itu dihapus dari tautan dari @Nickolay. Berikut ini tautan langsung kefunction*
di MDN . Benar saja, dukungan "dasar" sejak v26 .Jawaban:
Ini adalah fungsi Generator .
Catatan sejarah:
Ini sintaks yang diusulkan untuk
EcmaScript.next
.Dave Herman dari Mozilla memberi ceramah tentang EcmaScript.next . Pada 30:15 ia berbicara tentang generator.
Sebelumnya, dia menjelaskan bagaimana Mozilla secara eksperimental menerapkan perubahan bahasa yang diusulkan untuk membantu mengarahkan komite. Dave bekerja sama dengan Brendan Eich, CTO Mozilla (saya pikir), dan perancang JavaScript asli.
Anda dapat menemukan lebih detail tentang wiki kelompok kerja EcmaScript: http://wiki.ecmascript.org/doku.php?id=harmony:generators
Kelompok kerja (TC-39) memiliki persetujuan umum bahwa EcmaScript.next harus memiliki semacam proposal generator iterator, tetapi ini belum final.
Anda tidak boleh mengandalkan ini muncul tanpa perubahan dalam versi bahasa berikutnya, dan bahkan jika itu tidak berubah, itu mungkin tidak akan muncul secara luas di browser lain untuk sementara waktu.
sumber
for(;;)
) lakukan? Mengapa menggunakannya dalam konteks ini?for(;;)
sama denganwhile (true)
. Ini digunakan dalam konteks ini karena urutan Fibonacci adalah urutan tanpa batas.Ini adalah fungsi generator - dan dikatakan demikian di halaman yang Anda kutip, dalam komentar yang Anda ganti dengan "ini adalah baris yang menarik" ...
Pada dasarnya ini adalah cara untuk menentukan urutan secara terprogram sehingga mereka dapat diedarkan dan elemen diakses oleh indeks tanpa harus menghitung seluruh urutan (ukuran mungkin tak terbatas) sebelumnya.
sumber
The
function*
jenis terlihat seperti itu bertindak sebagai fungsi generator untuk proses yang dapat mengulangi. C # memiliki fitur seperti ini menggunakan "hasil pengembalian" lihat 1 dan lihat 2Pada dasarnya ini mengembalikan setiap nilai satu per satu ke apa pun yang mengulangi fungsi ini, itulah sebabnya kasus penggunaannya menunjukkannya dalam loop gaya foreach.
sumber