ES6 生成器学习

完整的运行案例

我们总是假设: 一个函数一旦开始执行,就会运行到结束,期间不会有其他代码能够打断它并插入值.(eval(…)不考虑,而且也不推荐)

var x = 1;

function foo() {
  x++;
  bar();
  console.log(x);
}

function bar(){
  x++;
}

foo(); // 3

// 如果foo函数长这样,但是我们还想x的运行结果是三,该怎么办?
function foo() {
  x++;
  console.log(x);
}

生成器示例

有没有可能在函数foo()在运行过程中,在某一步进行中断,转而运行其他代码呢?
而ES6的生成器就是通过某种形式在代码内部指示暂停,实现中断从而运行其他代码。

var x = 1;

// 代码function *foo(){..}和function* foo(){..}是等价的,因为这样使用*foo()来引用生成器比较一致。如果只用foo()形式你就不清楚我指的是生成器还是常规函数
function *foo() {
  x++;
  yield; 
  console.log(x);
}

function bar() {
  x++;
}

var it = foo(); // 构造一个迭代器,控制生成器的运行
it.next();  // 启动生成器*foo(),运行到第一个 yield,并在yield语句处暂停
bar();
it.next();  // 从第一次暂停的yield处恢复生成器*foo()的运行,运行到第二个 yield(如果有)

// 生成器是一类特殊的函数可以多次启动/暂停
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值