JavaScript生成器函数(generator function)

  • 注意:数组推导式生成器推导式建议都不要使用。都是非标准语法。
  • 可以使用生成器函数(generator function)
  • 语法:

function* 函数名(参数){函数体}

  1. 生成器函数在执行时能暂停,后面又能从暂停出继续执行。

    • 使用yield关键字可以暂停函数
  2. 调用一个生成器函数,会得到生成器的迭代器对象。
    • 使用next()方法。被首次(后续)调用时,其内的语句会执行到第一个(后续)出现yield的位置为止,yield 后紧跟迭代器要返回的值。
    • yield*(多了个星号),则表示将执行权移交给另一个生成器函数(当前生成器暂停执行)。
    • next()-> {value:value1,done:true|false}
      1. value:表示本次返回的值,即yield表达式返回的值
      2. done:表示生成器后续是否还有yield语句,即生成器函数是否已经执行完毕并返回。
    • 注意:next()方法时,如果传入了参数,那么这个参数会作为上一条直线的yield语句的返回值
function * gen(){yield 10;y = yield 'foo';yield y;
}var gen_obj = gen();
console.log(gen_obj.next()); // 10
console.log(gen_obj.next());
console.log(gen_obj.next(11));
console.log(gen_obj.next());

  1. 示例:计数器生成器版本

    const num = function*(n=0){while (true){if(n>=11) return n;yield ++n;}
    }()console.log(num.next())
    for(let i of num){console.log(i)
    }
    

  2. yield*的示例

function* anotherGenerator(i) {yield i + 1;yield i + 2;yield i + 3;
}function* generator(i){yield i;yield* anotherGenerator(i);// 移交执行权yield i + 10;
}var gen = generator(10);console.log(gen.next().value); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20

JavaScript生成器函数(generator function)相关推荐

  1. javascript 生成器函数 function*

    今天看了一下这块的东西,文档不是很好理解.但是完完整整看下来,文档还是很全的. 这里算是总结一下在看生涩的文档之前可以了解的东西,方便看文档的时候好理解. 1,什么是生成器函数(function*) ...

  2. JavaScript 生成器函数

    JavaScript 生成器函数是一种特殊的函数,它可以返回一个迭代器.使用生成器函数,可以在函数执行期间暂停并返回一个值,并在之后继续执行函数. 使用生成器函数时,需要在函数名前面加上一个星号 (* ...

  3. ES6生成器函数generator

    ES6生成器函数generator generator是ES6新增的一个特殊函数,通过 function* 声明,函数体内通过 yield 来指明函数的暂停点,该函数返回一个迭代器,并且函数执行到 y ...

  4. JavaScript的函数(function)

    目录 函数的基本概念 概念: 理解: 优点: 函数的基本语法 声明式: 赋值式: 调用: 函数的参数 一个参数时 多个参数时 函数的返回值 函数的返回值return 简单的理解return 为什么要有 ...

  5. python生成器函数(generator),python3学习笔记:生成器generator

    简单了解下生成器generator,主要是yield的返回值和send的传参,记录下. 生成器的基本属性 generator = 函数 + yield 简单说,就是一个函数,里面用到了关键字yield ...

  6. JavaScript 箭头函数与function函数区别

    结合以下注释理解代码,有空再分步骤讲解 // 执行正常 function 方法名() 会直接将函数提升到顶部所以此步成功 normalFun(2); // 执行失败 因var会将arrowFun变量提 ...

  7. [译] 什么是 JavaScript 生成器?如何使用生成器?

    原文地址:What are JavaScript Generators and how to use them 原文作者:Vladislav Stepanov 译文出自:掘金翻译计划 本文永久链接:g ...

  8. 细说JavaScript异步函数发展历程

    2019独角兽企业重金招聘Python工程师标准>>> < The Evolution of Asynchronous JavaScript >外文梳理了JavaScri ...

  9. 石川es6课程---13-16、generator-认识生成器函数

    石川es6课程---13-16.generator-认识生成器函数 一.总结 一句话总结: ` generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权 ` 需要调用next() ...

最新文章

  1. linux 删除含有关键词的文件_误删除Linux系统文件了?这个方法教你解决
  2. 【c语言】求最大最小值
  3. Javascript JQuery获取当前元素的兄弟元素/上一个/下一个元素(转)
  4. FPGA之道(46)数字电路中的隐患
  5. Rust基础笔记:Getting input from the console
  6. Java实现算法导论中快速傅里叶变换FFT迭代算法
  7. 【thinkPHP框架】Failed opening required 'header.php' include_path='.;c:\php5\pear 终级解决方案...
  8. spark 笔记 16: BlockManager
  9. arduino 停止程序_建立Arduino机器人,第五部分:障碍规避
  10. 我的Go+语言初体验——(6)整型有理数数据类型
  11. Vs code 02 配置非标准的C、C++的编译环境
  12. HttpClient-Java-发送HTTP请求
  13. mongodb插入数据_MongoDB插入
  14. VC++中OpenGL的配置
  15. Lorenz系统的吸引子相图
  16. Censored! POJ - 1625
  17. 微信支付不靠谱 星巴克喝一杯咖啡被刷掉一千多
  18. 天才小毒妃 第914章 无论如何要带她走
  19. LINUX内核内存屏障
  20. 网络工程师面试题(面试必看)(4)

热门文章

  1. STM32H750获取OV2640摄像头图像及上位机解码(一维码二维码)
  2. van的时间选择控件van-datetime-picker的坑
  3. ESP32 MicroPython开发之旅 基础篇② —— MicroPython 执行过程
  4. 2021年G3锅炉水处理新版试题及G3锅炉水处理复审模拟考试
  5. 笔记篇-在linux终端上用reaver破解wifi。
  6. R语言作图:坐标轴设置
  7. solr 教程,值得刚接触搜索开发人员一看
  8. Caffe训练分类器不收敛,loss居高不下
  9. 把点开活:互联网圈的说学逗唱
  10. 《人件》与软件研发项目管理