var clock = function*() {
while (true) {
console.log('Tick!');
yield;
console.log('Tock!');
yield;
}
};
可以看到,Generator 函数实现的状态机不用设初始变量,不用切换状态,上面的Generator函数实现与ES5实现对比,可以看到少了用来保存状态的外部变量ticking,这样就更简洁,更安全(状态不会被非法篡改)、更符合函数式编程的思想,在写法上也更优雅。Generator之所以可以不用外部变量保存状态,是因为它本身就包含了第一个状态和第二个状态。
包含了第一个和第二个状态怎么理解???怎么实现切换的
至少贴个上下文或者链接吧。。
第一个和第二个状态指的是变量
ticking
的值,先是true
后是false
没必要切换,因为
clock
函数在执行完后就没有了,为了保证下一次执行能够正确获得上一次的状态,才需要一个外部变量。而Generator则不需要,它的内部机制保证了它可以得到上一个状态的信息。