Na tej stronie znalazłem nowy typ funkcji JavaScript:
// 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;
}
}
Już wiem co yield
, let
i [?,?]=[?,?]
robić , ale nie mają pojęcia, co function*
to miało być. Co to jest?
PS nie przeszkadza w wypróbowaniu Google, nie można wyszukiwać wyrażeń z gwiazdkami ( są one używane jako symbole zastępcze ).
javascript
function
ecmascript-6
ciąg QNA
źródło
źródło
function*
składnia jest obsługiwana w Firefox od wersji 26: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Starsze wersje używały innej składni.*
został usunięty z linku z @Nickolay. Oto link bezpośrednio dofunction*
MDN . Oczywiście „podstawowa” obsługa od wersji 26 .Odpowiedzi:
To funkcja generatora .
Nota historyczna:
Jest to proponowana składnia dla
EcmaScript.next
.Dave Herman z Mozilli wygłosił wykład na temat EcmaScript.next . O 30:15 mówi o generatorach.
Wcześniej wyjaśnia, w jaki sposób Mozilla eksperymentalnie wdraża proponowane zmiany językowe, aby pomóc kierować komitetem. Dave ściśle współpracuje z Brendanem Eichem, CTO Mozilli (myślę) i oryginalnym projektantem JavaScript.
Więcej informacji można znaleźć na wiki grupy roboczej EcmaScript: http://wiki.ecmascript.org/doku.php?id=harmony:generators
Grupa robocza (TC-39) zgodziła się ogólnie, że EcmaScript.next powinien mieć jakąś propozycję iteratora generatora, ale to nie jest ostateczne.
Nie powinieneś polegać na tym, że będzie się wyświetlać bez zmian w następnej wersji języka, a nawet jeśli się nie zmieni, prawdopodobnie przez jakiś czas nie pojawi się szeroko w innych przeglądarkach.
źródło
for(;;)
)? Dlaczego warto go używać w tym kontekście?for(;;)
jest taki sam jakwhile (true)
. Jest używany w tym kontekście, ponieważ sekwencja Fibonacciego jest sekwencją nieograniczoną.Jest to funkcja generatora - i tak napisano na cytowanej stronie, w komentarzu zastąpionym przez „to jest ciekawa linia” ...
Zasadniczo jest to sposób programowego określania sekwencji, aby można było je przekazywać i uzyskiwać dostęp do elementów za pomocą indeksu bez konieczności wcześniejszego obliczania całej sekwencji (prawdopodobnie o nieskończonej wielkości).
źródło
Te
function*
spojrzenia typu jak to działa jako generator funkcji dla procesów, które można iterować. C # ma taką funkcję za pomocą „zwrotu z zysku” patrz 1 i patrz 2Zasadniczo zwraca to każdą wartość jeden po drugim do tego, co iteruje tę funkcję, dlatego ich przypadek użycia pokazuje ją w pętli stylu foreach.
źródło