Javascript 对两个不同序列使用单个生成器

Javascript 对两个不同序列使用单个生成器,javascript,Javascript,我很难理解为什么我的代码不能正确执行,我使用一个生成器生成两个不同的序列 function lerp(a, b, perc) { return a + (b - a) * perc; }; function check_lerp(a, b) { if(Math.abs(a - b) > 0.3) return true; return false; }; //lerp generator, given a start and end angle generate

我很难理解为什么我的代码不能正确执行,我使用一个生成器生成两个不同的序列

function lerp(a, b, perc) {
    return a + (b - a) * perc;
};

function check_lerp(a, b) {
    if(Math.abs(a - b) > 0.3) return true;
    return false;
};

//lerp generator, given a start and end angle generates angles for back-and forth motion.
//start -> end and then end -> start again.
function *lgen(start, end, perc) {
    let back = false;
    s = start;
    e = end;
    while(1) {
        if(check_lerp(s, e)){
            s = lerp(s, e, perc);
            yield s;
        }
        else if(!back) {
            back = true;
            s = end;
            e = start;
        }
        else break;
    }
}

var first =  lgen(0, 10, 0.1);
var second = lgen(100, 200, 0.1);

console.log(first.next().value);
console.log(second.next().value);
console.log(first.next().value); //should be between 0 and 10 but is 119 (resumes second.next() val.)


知道发生了什么吗?提前感谢。

只需使用局部变量即可。未声明的变量是全局变量

功能lerp(a、b、perc){
返回a+(b-a)*perc;
};
功能检查程序(a、b){
if(Math.abs(a-b)>0.3)返回true;
返回false;
};
//lerp生成器,给定开始和结束角度,生成来回运动的角度。
//开始->结束,然后结束->再次开始。
功能*lgen(开始、结束、perc){
放回去=假,
s=start,//声明并初始化
e=end;//声明并初始化
而(1){
如有(请勾选){
s=lerp(s、e、perc);
产量;
}否则如果(!返回){
返回=真;
s=结束;
e=启动;
}否则就断了;
}
}
var first=lgen(0,10,0.1);
var second=lgen(100200,0.1);
console.log(first.next().value);
console.log(second.next().value);
console.log(first.next().value)//应介于0和10之间,但为119(恢复秒。下一个()val.)