因为IBM Developer Works中有一篇文章 CPS </跨度> (继续传递风格),我试图不使用“返回”。
无 CPS </跨度>
function getter(){ *计算一个* 返回;}功能测试 … () { *第1部分* if(* condition ){ a = getter(); } 用一个* *第2部分*}
过渡
剩下的功能
} *用一个* *第2部分*
同 CPS </跨度>
功能吸气剂……
延续传递风格与JavaScript循环不能很好地融合。你需要找到另一种方法来完成循环。
请注意,您的代码的解释如下:
function test() { *part 1* if (*condition*) { getter(); } // <--- note indentation here function continuationtest(a) { // <--- and here } *use a* *part 2* }
因此,您目前根本没有使用延续传递方式。什么时候 getter() 电话 continuationtest() ,它可能会失败,因为 continuationtest() 不在那里。
getter()
continuationtest()
带循环的CPS示例可能如下所示。
的 没有CPS 强>
function doSomething(i) { alert("doing " + i); } function doLoop() { for (i = 0; i < 9; i++) doSomething(i); }
的 随着CPS 强>
function doSomething(i, ctn) { alert("doing " + i); ctn(); } function doLoop() { doLoopStartingAt(0); function doLoopStartingAt(i) { if (i < 9) doSomething(i, function ctn() { doLoopStartingAt(i + 1); }); } }
(CPS的优势在于您可以随时使用 setTimeout() 延迟执行其余的操作,或者等待处理用户输入,或者避免浏览器显示“慢速脚本”弹出窗口。)
setTimeout()
你有一个错字:
function continuationtest(a) { } *use a* *part 2* }
这可能是你想要的:
function continuationtest(a) { *use a* *part 2* }
除此之外,很难提供如此少的信息,例如将会发生的事情 continuationtest 因为如果你还有问题,这可能是至关重要的。
continuationtest