专栏首页gojam技术备忘录function*/生成器函数

function*/生成器函数

function*语句允许你声明一个生成器函数,这种函数的返回值是一个Generator对象,它允许你控制函数的暂停、继续执行。这种同步操作允许我们使用JavaScript的异步编程——function*每次只返回一个特殊的指针,并不直接真正地返回值,因此function*内外的代码可以同时执行。

function* generator(param,...)
{
...
yield ...
}

异步执行

function* add(inc){
inc++
yield inc++
yield inc++
}
let f=add(10)
f.next()//inc==11 { value: 11, done: false }
f.next()//inc==12 { value: 12, done: false }
f.next()//inc==13 { value: undefined, done: true }

遇到yield时函数会暂停执行后面的代码,直到next()方法被调用,该方法的返回值包括表达式的结果和完成状态。使用函数生成器时函数不会执行,因此需要使用一次next()。

上文的程序为什么到最后变成undefined呢?这是因为每次next()都会执行到yield关键字后的表达式处,并且将yield后的表达式结果作为value返回。而add函数内只有两个yield,虽然三次调用next()才能完成调用过程,但最后一次不返回value,在函数末尾加上return语句就能让next返回return后的表达式值。值得一提的是,函数生成器返回的是Generator对象,但这不影响在函数生成器内使用return。

为什么value=11和12,不应该12和13吗?inc++实际上是先返回inc再+1,这里就是inc++和++inc的差别。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一、c++中经常被面试官面试的小问题总结(本篇偏向基础知识)

    原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html

    徐飞机
  • 字节跳动凉面(抖音C++)(问题+解答)

    本科大四。 在字节官网投了简历,过了一天突然收到hr电话,问我工作倾向于北京还是上海,我说上海,然后hr说把我简历转给抖音上海hr....又过了一天(清明节前一...

    牛客网
  • C++ 标准库之 iomanip 、操作符 ios::fixed 以及 setprecision 使用的惨痛教训经验总结

    本菜鸡自从退役之后就再也没怎么敲过 C++ 代码,在 C++ 语言下,求解关于浮点数类型的问题时,之前有碰到类似的情况,但是似乎都没有卡这块的数据,基本上用一个...

    Angel_Kitty
  • Linux编程--指针的++操作

    在学习ELF文件的过程中,看到Matrix中有类似于如下的代码来遍历ELF文件的e->phdr程序头表的内容。

    None_Ling
  • Protocol Buffers(1):序列化、编译与使用

    Protocol Buffers docs:https://developers.google.com/protocol-buffers/docs/overvi...

    李拜六不开鑫
  • 百度面试两板斧:手写算法问基础

    17年7月份,我参加了百度的实习生面试,随后在百度开始了半年的实习生活,18年7月份,我参加了百度的校招提前批面试,由于可以同时参加百度多个部门的提前批面试,结...

    黄小斜
  • JavaScript和Java的区别?

    它是运行在浏览器中的一种脚本语言,在web页面中,Javascript可谓是无所不能:

    葆宁
  • 五大人工智能流行编程语言对比,只要学会一种绝对不亏!

    就像大多数软件应用程序的开发一样,开发人员也在使用多种语言来编写人工智能项目,但是现在还没有任何一种完美的编程语言是可以完全速配人工智能项目的。

    一墨编程学习
  • 只有程序员才看得懂的段子!

    一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”

    加米谷大数据
  • Linux 多进程通信开发(六): 共享内存

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/briblue/article/details/891...

    Frank909

扫码关注云+社区

领取腾讯云代金券