从javascript生成器对象内部对自身的引用
我试图用迭代器函数替换对alert()的调用,并生成 下面是一个非常基本的代码片段从javascript生成器对象内部对自身的引用,javascript,Javascript,我试图用迭代器函数替换对alert()的调用,并生成 下面是一个非常基本的代码片段 var全局函数; 函数*测试(){ /* test是一个生成器函数。它将返回一个迭代器函数 在这个迭代器函数产生之后,我希望当 按钮2被单击。(就像按钮2是警报中的按钮一样) 注意,这里的迭代器函数仍然不存在,它将是 在生成器函数结束时返回 */ var ele=document.getElementById(“btn2”); ele.onclick=函数(){ globalFunction.next();
var全局函数;
函数*测试(){
/*
test是一个生成器函数。它将返回一个迭代器函数
在这个迭代器函数产生之后,我希望当
按钮2被单击。(就像按钮2是警报中的按钮一样)
注意,这里的迭代器函数仍然不存在,它将是
在生成器函数结束时返回
*/
var ele=document.getElementById(“btn2”);
ele.onclick=函数(){
globalFunction.next();
/*在这里使用某种“这个”吗*/
};
产量1;
console.log(“test2”);
产量2;
}
函数btn1(){
console.log(“btn1”);
var mytest=test();
globalFunction=mytest;
var res=mytest.next();
console.log(res.value);
}
BTN1
BTN2
最后,我提出了一个解决方案,在生成器对象中有一个对自身的引用(某种程度上)
function runGenerator (gen) {
function* wrapper () {
var reflection = yield;
yield* gen(reflection);
}
var genObj = wrapper();
genObj.next();
return genObj.next(genObj);
}
@brk function*将函数定义为生成器。然后,在迭代器函数中可以使用yield。全局变量很难避免,因为两个不同的onclick处理程序需要访问同一迭代器实例。您可以考虑在“容器”函数中封装整个代码示例(包括变量),以限制范围。你到底想在这里完成什么?据我所知,为什么不在function
btn1
中指定ele.onclick
,而不是在functiontest
中?这样就不需要全局变量了。@charlietfl我有一个验证某些数据的大型函数。在某个时刻,我会调用alert(“some message”),然后停止进程,直到用户接受消息,然后从这一点开始继续执行。我尝试使用点击按钮2而不是警报。