zoukankan      html  css  js  c++  java
  • js生成器Generator

    js生成器Generator

    使用 function* 语法和一个或多个 yield 表达式以创建一个函数即为生成器,当然它的返回值就是一个迭代器即生成器。

    Generator可以使函数分段执行,yield 可以返回值。调用使用next

    它不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示区别。其实整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用 yield 语句注明。

    next 方法的作用是分阶段执行 Generator 函数。每次调用 next 方法,会返回一个对象,这个对象就是具有两个属性(done (done=false) 和 value (value=operand))的 IteratorResult 对象。value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段。

      // 生成器Generator
          function* fun() {
            console.log(1);
            let a = yield "aa";
            console.log(a);
            let b = yield "bb";
            console.log(b);
          }
          let genObj = fun();
          let i = genObj.next(10); //输出1
          let j = genObj.next(20); //输出2
          let m = genObj.next(30); //输出3
          console.log(i, j, m);  //{value: "aa", done: false} {value: "bb", done: false} {value: undefined, done: true}
  • 相关阅读:
    Scala之eq,equals,==的区别
    Spark Streaming流计算特点及代码案例
    刷题50—水壶问题
    刷题49(力扣3道题)
    刷题48——最长回文串
    刷题47——矩形重叠
    刷题46——拼写单词
    刷题45(力扣两道题)
    刷题44——岛屿的最大面积
    刷题43——最长上升子序列
  • 原文地址:https://www.cnblogs.com/gao7/p/15019024.html
Copyright © 2011-2022 走看看