ES6中Generator函数中clock函数问题

var clock = function*() {
  while (true) {
    console.log('Tick!');
    yield;
    console.log('Tock!');
    yield;
    }
};

可以看到,Generator 函数实现的状态机不用设初始变量,不用切换状态,上面的Generator函数实现与ES5实现对比,可以看到少了用来保存状态的外部变量ticking,这样就更简洁,更安全(状态不会被非法篡改)、更符合函数式编程的思想,在写法上也更优雅。Generator之所以可以不用外部变量保存状态,是因为它本身就包含了第一个状态和第二个状态。

包含了第一个和第二个状态怎么理解???怎么实现切换的
阅读 1.6k
1 个回答

至少贴个上下文或者链接吧。。

第一个和第二个状态指的是变量ticking的值,先是true后是false
没必要切换,因为clock函数在执行完后就没有了,为了保证下一次执行能够正确获得上一次的状态,才需要一个外部变量。而Generator则不需要,它的内部机制保证了它可以得到上一个状态的信息。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题