Maison >interface Web >js tutoriel >Explication des fonctions du générateur dans ES6 (exemples de code)
Cet article vous apporte une introduction à l'utilisation du validateur dans laravel (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
En fait, je ne sais pas comment écrire les premiers chapitres, car ils impliquent toujours des choses plus profondes, comme 可迭代对象
, 生成器
, 迭代器
et ainsi de suite Il sera peut-être préférable d'organiser ces choses après avoir terminé cette série. Maintenant, écrivez simplement partout où vous les organisez
function* name([param[, param[, ... param]]]) { statements }
Utilisez la fonction* comme identifiant de déclaration, indiquant qu'il s'agit de une fonction génératrice
name est le nom de la fonction
param est le nom du paramètre, il peut y avoir 255
instructions est le corps de la fonction
La fonction génératrice peut être suspendue pendant l'exécution et continuer l'exécution si nécessaire
La fonction génératrice renvoie un objet itérateur et ne sera pas exécutée immédiatement
La fonction génératrice peut utiliser return, mais il ne sera pas itérable après le retour
function* idMaker(begin=0){ while(true) yield begin++; } let maker=idMaker(0) console.log(maker.next().value) // 0 console.log(maker.next().value) // 1 console.log(maker.next().value) // 2 console.log(maker.next().value) // 3 ...
Explication :
L'appel de la fonction génératrice return est un itérateur, et un itérateur est un objet qui satisfait le protocole itérateur. En termes simples, l'objet itérateur doit avoir une fonction suivante. Cette fonction renvoie un objet, que nous appelons l'objet résultat de l'itération. Cet objet contient les deux attributs suivants :
id
function* idMaker(begin=0){ while(begin<3) yield begin++; } let maker=idMaker(0) console.log(maker.next()) // {value: 0, done: false} console.log(maker.next()) // {value: 1, done: false} console.log(maker.next()) // {value: 2, done: false} console.log(maker.next()) // {value: undefined, done: true}Si l'exécution de la fonction est terminée, alors done deviendra automatiquement vraila prochaine réception des paramètres
function *createIterator() { let first = yield 1; let second = yield first + 2; // 4 + 2 // first =4 是next(4)将参数赋给上一条的 yield second + 3; // 5 + 3 } let iterator = createIterator(); console.log(iterator.next()); // "{ value: 1, done: false }" console.log(iterator.next(4)); // "{ value: 6, done: false }" console.log(iterator.next(5)); // "{ value: 8, done: false }" console.log(iterator.next()); // "{ value: undefined, done: true }"C'est assez difficile à expliquer, le premier l'appel à iterator.next() renvoie 1, et le code s'arrête à rendement 1, mais nous enregistrons le résultat de rendement 1 dans la première variable. En fait, cette opération ne se produit pas lorsque nous exécutons l'itérateur pour la deuxième fois. (4), notez qu'un paramètre 4 est passé ici. À ce moment, 4 sera considéré comme la valeur de retour du rendement 1 et attribué au premier, de sorte que la deuxième exécution peut être considérée comme une séquence d'exécution de let first=4. retour
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!