【发布时间】:2016-02-10 21:25:40
【问题描述】:
我有以下蹦床实现:
function trampoline(f) {
while (f && f instanceof Function) {
f = f.apply(f.context, f.args);
}
return f;
}
它的工作原理也是如此,例如阶乘:
function factorial(n) {
function recur(n, acc) {
if (n == 0) {
return acc;
} else {
return recur.bind(null, n-1, n*acc);
}
}
return trampoline(recur.bind(null, n, 1));
}
问题是我不明白f.context 和f.args 是如何作为参数传入的,例如,当我尝试访问和console.log他们。然后记录 undefined 值。
这个传递函数参数的特定实现的机制是什么?
【问题讨论】:
-
你能澄清一下使用蹦床与仅仅调用“vanilla”函数相比有什么优势吗?
-
Javascript 默认不优化尾递归,因此很容易超过堆栈限制和耗尽性能。
-
您的代码似乎运行良好,您能澄清一下问题吗?
-
问题如前所述,了解如何将 f.context 和 f.args 作为递归参数以及函数如何访问它们。当您尝试在蹦床期间记录它们时,它们会显示未定义。
标签: javascript recursion functional-programming