JS中的 generator
JS 中的 generator
(生成器)和 Python 中的很相似。
一个generator
看上去像一个函数,但可以返回多次。与函数不同的是,generator
由function*
定义(注意多出的*
号),并且,除了return
语句,还可以用yield
返回多次。
比如用 generator
写一个生成斐波那契数列的函数:
function* fib(max) {vart,a = 0,b = 1,n = 0;while (n < max) {yield a;[a, b] = [b, a + b];n ++;}return;
}var f = fib(5); //这里调用了fib函数,但只是创建了一个generator对象,而不是调用它
调用generator
对象有两个方法,一是不断地调用generator
对象的next()
方法:
f.next(); // {value: 0, done: false}
f.next(); // {value: 1, done: false}
f.next(); // {value: 1, done: false}
f.next(); // {value: 2, done: false}
f.next(); // {value: 3, done: false}
f.next(); // {value: undefined, done: true}
next()
方法会执行generator
的代码,然后,每次遇到yield x
就返回一个对象{value: x, done: true/false}
,然后“暂停”。
每次调用 next
方法时,程序会回到上次 yield
返回的地方,然后继续执行代码,且代码中的上下文环境会被保存下来,如 a,b,n
这几个变量就是上次代码执行的结果。
返回的value
就是yield
的返回值,done
表示这个generator
是否已经执行结束了。如果done
为true
,则value
就是return
的返回值。
当执行到done
为true
时,这个generator
对象就已经全部执行完毕,不要再继续调用next()
了。
第二个方法是直接用for ... of
循环迭代generator
对象,这种方式不需要我们自己判断done
:
for (var x of fib(10)) {console.log(x); // 依次输出0, 1, 1, 2, 3, ...
}
来源:https://www.liaoxuefeng.com/wiki/1022910821149312/1023024381818112
JS中的 generator相关推荐
- js中的generator
generator(生成器)是ES6标准引入的新的数据类型.一个generator看上去像一个函数,但可以返回多次. ES6定义generator标准的哥们借鉴了Python的generator的概念 ...
- JS中的Generator函数
Generator 函数是 ES6 提供的一种异步编程解决方案,它是一个状态机,封装了多个内部状态:它提供一种有效的方式来制作迭代器,并且能够处理无限数据流:当与Promises一起使用时,生成器可以 ...
- js中的yield、yield*和Generator函数
基本概念 yield和yield*都是js中的关键字,他们不能直接使用:只能配合Generator进行使用:Generator是一种函数,声明方式和普通函数类似,只不过要在function后面加个*( ...
- es6 中的generator函数控制流程
Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是&qu ...
- 掌握Node.js中的Async和Await
在本文中,你将学习如何使用Node.js中的async函数(async/await)来简化callback或Promise. 异步语言结构在其他语言中已经存在了,像c#的async/await.Kot ...
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出"欢迎下次光临" 在网页中弹出框输入1 网页输 ...
- Js中函数式编程的理解
函数式编程的理解 函数式编程是一种编程范式,可以理解为是利用函数把运算过程封装起来,通过组合各种函数来计算结果.函数式编程与命令式编程最大的不同其实在于,函数式编程关心数据的映射,命令式编程关心解决问 ...
- Js中Currying的应用
Js中Currying的应用 柯里化Currying是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术,是函数式编程应用. 描述 如果说函数式编程中有两 ...
- 小白必看!JS中循环语句大集合
摘要:JavaScript中,一共给开发者提供了一下几种循环语句,分别是while循环,do-while循环,for循环,for Each,for-in循环和for-of循环. 本文分享自华为云社区& ...
最新文章
- 和 VMware、深信服、天翼云、招商云专家一起聊聊云原生边缘计算
- Scala模式匹配中的变量
- 报错 之 ModuleNotFoundError: No module named ‘setproctitle‘
- javaScript今日总结
- xml格式的word转为标准格式_保持的怎么保证Word格式不变?4个技巧需要带走
- PHP JAVA BASE64 encode decode
- PrefTest性能测试解决方案 -- C/S结构应用系统的压力测试
- 传智播客java测试题_传智播客java考试习题3
- C#开发工控上位机编程 csdn_C#联合WINCC之数据通信
- 正则表达式小Tips
- DarkComet Analysis – Understanding the Trojan used in Syrian Uprising
- 基于aircrack-ng、crunch的wifi握手包爆破
- IDEA 运行 springboot运行出现 错误: 找不到或无法加载主类和找不到资源文件类
- sybase客户端SqlDbx中文乱码问题解决
- UniAPP离线车牌实时扫描识别
- HTML如何做一张李白的静夜思,李白《静夜思》配图赏析
- 移动宽带安装说明一(刘欣)
- 捕获窗口跳入跳出事件
- 沁恒触摸蓝牙模块方案测试体验(CH582)
- 【IoT】产品设计之行业动态:社区团购:巨头们会放弃卖菜这门生意吗?