• ES6 generator


    示例:

    function* helloWorldGenerator() {
      yield 'hello';
      yield 'world';
      return 'ending';
    }
    
    var hw = helloWorldGenerator();

    上面代码定义了一个 Generator 函数helloWorldGenerator,它内部有两个yield表达式(helloworld),即该函数有三个状态:hello,world 和 return 语句(结束执行)。

    然后,Generator 函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是上一章介绍的遍历器对象(Iterator Object)。

    下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield表达式(或return语句)为止。换言之,Generator 函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执行

    yield表达式与return语句既有相似之处,也有区别。相似之处在于,都能返回紧跟在语句后面的那个表达式的值。区别在于每次遇到yield,函数暂停执行,下一次再从该位置继续向后执行,而return语句不具备位置记忆的功能。一个函数里面,只能执行一次(或者说一个)return语句,但是可以执行多次(或者说多个)yield表达式。正常函数只能返回一个值,因为只能执行一次return;Generator 函数可以返回一系列的值,因为可以有任意多个yield。从另一个角度看,也可以说 Generator 生成了一系列的值,这也就是它的名称的来历(英语中,generator 这个词是“生成器”的意思)。

  • 相关阅读:
    html2pdf后逐页固定位置盖公章
    c#Stream学习笔记
    Flume -- 开源分布式日志收集系统
    Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具
    Hive -- 基于Hadoop的数据仓库分析工具
    HBase -- 基于HDFS的开源分布式NoSQL数据库
    ZooKeeper -- 分布式开源协调服务
    Hadoop学习(4)-- MapReduce
    Hadoop学习(3)-- 安装1.x版本
    Hadoop学习(2)-- HDFS
  • 原文地址:https://www.cnblogs.com/mengfangui/p/9512243.html
Copyright © 2020-2023  润新知