Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript生成器对象内部对自身的引用_Javascript - Fatal编程技术网

从javascript生成器对象内部对自身的引用

从javascript生成器对象内部对自身的引用,javascript,Javascript,我试图用迭代器函数替换对alert()的调用,并生成 下面是一个非常基本的代码片段 var全局函数; 函数*测试(){ /* test是一个生成器函数。它将返回一个迭代器函数 在这个迭代器函数产生之后,我希望当 按钮2被单击。(就像按钮2是警报中的按钮一样) 注意,这里的迭代器函数仍然不存在,它将是 在生成器函数结束时返回 */ var ele=document.getElementById(“btn2”); ele.onclick=函数(){ globalFunction.next();

我试图用迭代器函数替换对alert()的调用,并生成

下面是一个非常基本的代码片段

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
,而不是在function
test
中?这样就不需要全局变量了。@charlietfl我有一个验证某些数据的大型函数。在某个时刻,我会调用alert(“some message”),然后停止进程,直到用户接受消息,然后从这一点开始继续执行。我尝试使用点击按钮2而不是警报。