ES6学习——生成器(Generators):生成器+迭代器
2016-01-30 10:35
387 查看
我们知道生成器也是迭代器,所以操作迭代器的方法都可以用来操作生成器,下面逐一过下:
1)next方法直接调用
2)for-of循环
3)spread操作符
4)数组解构赋值
我们知道生成器最后有个返回值的,那么这个返回值会不会影响这些操作结果呢?
从上面的例子可以看出,next函数调用最后一步或有影响,剩下的操作符基本都是忽略return返回值的。
*以上全部代码在Chrome 48下通过测试
function* genFunc() { yield 'a'; yield 'b'; }
1)next方法直接调用
let genObj = genFunc(); genObj.next()//{ value: 'a' , done: false } genObj.next()//{ value: 'b' , done: } genObj.next()//{ value: undefined, done: true }
2)for-of循环
for (let x of genFunc()) { console.log(x);//a b }
3)spread操作符
let arr = [...genFunc()]; // ['a', 'b']
4)数组解构赋值
let [x, y] = genFunc();//x=a,y=b
我们知道生成器最后有个返回值的,那么这个返回值会不会影响这些操作结果呢?
function* genFuncWithReturn() { yield 'a'; yield 'b'; return 'result'; }
let genObjWithReturn = genFuncWithReturn(); genObjWithReturn.next()//{ value: 'a', done: false } genObjWithReturn.next()//{ value: 'b', done: false } genObjWithReturn.next()//{ value: 'result', done: true }//return的结果多为done为true时的value值
for (let x of genFuncWithReturn()) { console.log(x);//a b }
let arr = [...genFuncWithReturn()]; // ['a', 'b']
从上面的例子可以看出,next函数调用最后一步或有影响,剩下的操作符基本都是忽略return返回值的。
*以上全部代码在Chrome 48下通过测试
相关文章推荐
- 百万数据查询优化技巧
- Codeforces Round #340 (Div. 2) D. Polyline (点之间关系)
- Network 【HTTP通信过程/请求】
- mysql的插入,查询,修改和删除
- mysql库和表的相关操作
- PL/SQL乱码解决
- Email List
- mysql的函数与存储过程
- 实现高性能JavaScript之执行与加载
- oracle中decode判断char类型时出错的问题
- UVa442 Matrix Chain Multiplication(栈)
- mysql表的连接
- [POJ 3026]Brog Maze[存疑!!!!!]
- activiti之流程变量值Business_key
- 欢迎使用CSDN-markdown编辑器
- 二、动态内存分配与使用
- Zernike矩之图像重建(附源码)
- 推荐一个集成环境 XAMPP
- 最短路——SPFA
- 配置多端口虚拟主机