Genertor 函数在之前 var 声明变量和赋值产生问题

ES5的状态机写法:

var ticking = trye;
var clock = function () {
    if (ticking){
        console.log('Tick!')
    }else{
        console.log('Tock!')
    }
    ticking = !ticking;
}

上面的 clock 函数一共有两种状态( Tick 和 Tock ),每运行一次,就改变一次状态。这个函数如果用 Genertor 实现,代码如下:

var clock = function* f() {
    while (true){
        console.log('Tick!');
        yield;
        console.log('Tock!');
        yield;
    }
};
clock.next();//clock.next is not a function 有谁能解释一下?

把赋值变量写到后面:

function* f() {
    while (true){
        console.log('Tick!');
        yield;
        console.log('Tock!');
        yield;
    }
};
var clock = f();
clock.next();//Tick 正常输出
clock.next();//Tock 正常输出