Maison  >  Article  >  interface Web  >  Explication des fonctions du générateur dans ES6 (exemples de code)

Explication des fonctions du générateur dans ES6 (exemples de code)

不言
不言avant
2018-11-14 16:39:111843parcourir

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.

Aperçu

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

Syntaxe

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

Caractéristiques

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

Chestnut-Infinite id grower

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 :

  1. <.>value : le résultat de cette itération


  2. done : valeur booléenne, si vraie, cela signifie qu'elle ne peut pas continuer. L'itération, si fausse, signifie que l'itération peut continuer.


Appelez la fonction suivante, qui exécutera réellement la fonction génératrice jusqu'à ce que le rendement soit atteint, et renverra l'objet résultat de l'itération

Chestnut-limited

Growerid

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 vrai

la 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer