首先看代码:
function tco(f) {
var value;
var active = false;
var accumulated = [];
return function accumulator() {
accumulated.push(arguments);
if (active ==false) {
active = true;
while (accumulated.length>0) {
console.log(accumulated);
console.log(accumulated.length);
value = f.apply(this, accumulated.shift());
}
active = false;
return value;
}
};
}
var ff = function(x, y) {
if (y > 0) {
return sum(x + 1, y - 1)
}
else {
return x
}
}
var sum = tco(ff);
console.log(sum);
var tt = sum(1, 5);
console.log(tt);
如上,是一个化递归为 while(true)循环的例子,然后 就是 apply方法 在传递参数的时候,会给上层 函数体的参数arguments赋值 从而 维持了while(true),可以验证。
(google f12开发者工具 source中调试js代码,断点,逐步,参数变量显示等等,还有控制台写代码的智能提示)