Auf dieser Seite habe ich einen neuen JavaScript-Funktionstyp gefunden:
// 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;
}
}
Ich weiß schon , was yield
, let
und [?,?]=[?,?]
zu tun , aber keine Ahnung, was das function*
gemeint ist , zu sein. Was ist es?
PS: Probieren Sie Google nicht aus. Es ist unmöglich , nach Ausdrücken mit Sternchen zu suchen ( sie werden als Platzhalter verwendet ).
javascript
function
ecmascript-6
Zeichenfolge QNA
quelle
quelle
function*
Syntax wird in Firefox seit Version 26 unterstützt: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Ältere Versionen verwendeten eine andere Syntax.*
aus, als wäre der Link von @Nickolay entfernt worden. Hier ist ein Link direkt zufunction*
bei MDN . Sicher genug, "grundlegende" Unterstützung seit v26 .Antworten:
Es ist eine Generatorfunktion .
Historischer Hinweis:
Es ist eine vorgeschlagene Syntax für
EcmaScript.next
.Dave Herman von Mozilla hielt einen Vortrag über EcmaScript.next . Um 30:15 spricht er über Generatoren.
Zuvor erklärte er, wie Mozilla vorgeschlagene Sprachänderungen experimentell umsetzt, um das Komitee zu steuern. Dave arbeitet eng mit Brendan Eich, Mozillas CTO (glaube ich) und dem ursprünglichen JavaScript-Designer zusammen.
Weitere Informationen finden Sie im Wiki der EcmaScript-Arbeitsgruppe: http://wiki.ecmascript.org/doku.php?id=harmony:generators
Die Arbeitsgruppe (TC-39) ist sich allgemein einig, dass EcmaScript.next einen Vorschlag für einen Generator-Iterator enthalten sollte, der jedoch nicht endgültig ist.
Sie sollten sich nicht darauf verlassen, dass dies ohne Änderungen in der nächsten Version der Sprache angezeigt wird, und selbst wenn es sich nicht ändert, wird es wahrscheinlich für eine Weile nicht in anderen Browsern angezeigt.
quelle
for(;;)
)? Warum in diesem Zusammenhang verwenden?for(;;)
ist das gleiche wiewhile (true)
. Es wird in diesem Zusammenhang verwendet, da die Fibonacci-Sequenz eine unbegrenzte Sequenz ist.Es ist eine Generatorfunktion - und das stand auf der Seite, die Sie zitieren, in dem Kommentar, den Sie durch "Dies ist die interessante Zeile" ersetzt haben ...
Grundsätzlich ist es eine Möglichkeit, Sequenzen programmgesteuert anzugeben, damit sie weitergegeben und Elemente über den Index aufgerufen werden können, ohne zuvor die gesamte Sequenz (möglicherweise unendlich groß) berechnen zu müssen.
quelle
Der
function*
Typ scheint als Generatorfunktion für Prozesse zu fungieren, die iteriert werden können. C # hat eine Funktion wie diese mit "Yield Return", siehe 1 und siehe 2Im Wesentlichen gibt dies jeden Wert einzeln an das zurück, was diese Funktion iteriert, weshalb der Anwendungsfall ihn in einer foreach-Stilschleife anzeigt.
quelle