简单说说JavaScript的Generator 实现(ES6)
2019-05-15 17:05
1046 查看
Generator 是 ES6 中新增的语法,和 Promise 一样,都可以用来异步编程
// 使用 * 表示这是一个 Generator 函数 // 内部可以通过 yield 暂停代码 // 通过调用 next 恢复执行 function* test() { let a = 1 + 2; yield 2; yield 3; } let b = test(); console.log(b.next()); // > { value: 2, done: false } console.log(b.next()); // > { value: 3, done: false } console.log(b.next()); // > { value: undefined, done: true }
从以上代码可以发现,加上
*的函数执行后拥有了
next函数,也就是说函数执行后返回了一个对象。每次调用
next函数可以继续执行被暂停的代码。以下是 Generator 函数的简单实现
// cb 也就是编译过的 test 函数 function generator(cb) { return (function() { var object = { next: 0, stop: function() {} }; return { next: function() { var ret = cb(object); if (ret === undefined) return { value: undefined, done: true }; return { value: ret, done: false }; } }; })(); } // 如果你使用 babel 编译后可以发现 test 函数变成了这样 function test() { var a; return generator(function(_context) { while (1) { switch ((_context.prev = _context.next)) { // 可以发现通过 yield 将代码分割成几块 // 每次执行 next 函数就执行一块代码 // 并且表明下次需要执行哪块代码 case 0: a = 1 + 2; _context.next = 4; return 2; case 4: _context.next = 6; return 3; // 执行完毕 case 6: case "end": return _context.stop(); } } }); }
相关文章推荐
- javascript实现简单的ajax封装示例
- JavaScript实现最简单的拖拽效果
- [转] 使用简单的JavaScript,我们为什么应该抵制ES6
- javascript简单布局实现单选按钮控件
- JavaScript简单实现的仿微博留言功能示例
- javascript checkbox全选和反选的简单实现
- javascript特效实现――当前时间和倒计时效果的简单实例
- Javascript实现的一个简单的弹幕效果-入门版
- JavaScript实现简单的日历效果
- javascript 超简单代码实现图片轮播功能
- JavaScript实际应用:简单二级联动菜单实现
- JavaScript实现简单人机五子棋
- HTML&&JavaScript实现一个简单的计算器
- 实现一个简单的Javascript级联下拉菜单
- javascript实现计时器的简单方法
- JavaScript实现简单的tab选项卡切换
- javascript实现简单的收藏功能
- JavaScript实现的贝塞尔曲线算法简单示例
- 简单实现分行输出的javascript代码
- javascript实现简单的链式调用