Dans cette page, j'ai trouvé un nouveau type de fonction 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;
}
}
Je sais déjà ce que yield
, let
et [?,?]=[?,?]
faire , mais ont aucune idée de ce que l' function*
on entend être. Qu'Est-ce que c'est?
PS ne prend pas la peine d'essayer Google, il est impossible de rechercher des expressions avec des astérisques ( elles sont utilisées comme espaces réservés ).
javascript
function
ecmascript-6
chaîne QNA
la source
la source
function*
syntaxe est prise en charge dans Firefox depuis la version 26: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Les versions plus anciennes utilisaient une syntaxe différente.*
été supprimé du lien de @Nickolay. Voici un lien directement versfunction*
MDN . Effectivement, support "basique" depuis la v26 .Réponses:
C'est une fonction de générateur .
Note historique:
C'est une syntaxe proposée pour
EcmaScript.next
.Dave Herman de Mozilla a fait une présentation sur EcmaScript.next . A 30h15, il parle de générateurs.
Plus tôt, il explique comment Mozilla met en œuvre expérimentalement les changements de langue proposés pour aider à diriger le comité. Dave travaille en étroite collaboration avec Brendan Eich, CTO de Mozilla (je pense) et le concepteur JavaScript d'origine.
Vous pouvez trouver plus de détails sur le wiki du groupe de travail EcmaScript: http://wiki.ecmascript.org/doku.php?id=harmony:generators
Le groupe de travail (TC-39) est généralement d'accord sur le fait qu'EcmaScript.next devrait avoir une sorte de proposition d'itérateur de générateur, mais ce n'est pas définitif.
Vous ne devriez pas vous fier à ce que cela apparaisse sans modifications dans la prochaine version de la langue, et même si cela ne change pas, il n'apparaîtra probablement pas largement dans d'autres navigateurs pendant un certain temps.
la source
for(;;)
)? Pourquoi l'utiliser dans ce contexte?for(;;)
c'est la même chose quewhile (true)
. Il est utilisé dans ce contexte car la séquence de Fibonacci est une séquence illimitée.C'est une fonction de générateur - et cela est dit dans la page que vous citez, dans le commentaire que vous avez remplacé par "c'est la ligne intéressante" ...
Fondamentalement, c'est un moyen de spécifier des séquences par programme afin qu'elles puissent être transmises et les éléments accessibles par index sans avoir à calculer la séquence entière (éventuellement de taille infinie) au préalable.
la source
Le
function*
type semble agir comme une fonction de générateur pour les processus qui peuvent être itérés. C # a une fonctionnalité comme celle-ci en utilisant "rendement retour" voir 1 et voir 2Essentiellement, cela renvoie chaque valeur une par une à ce qui itère cette fonction, c'est pourquoi leur cas d'utilisation la montre dans une boucle de style foreach.
la source