我有以下蹦牀實現:瞭解蹦牀優化
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
是作爲參數傳遞的,那些屬性在蹦牀內部的重複函數中顯然無法找到,例如,當我嘗試訪問它們並嘗試訪問它們時。然後它會記錄undefined
值。
這個特定實現的機制是傳遞函數的參數嗎?
你能澄清什麼是使用蹦牀的優勢,而不是隻稱爲「香草」功能? –
默認情況下,Javascript並未優化尾部遞歸,所以它很容易超出堆棧限制和排氣性能。 –
你的代碼似乎工作正常,你能澄清這個問題嗎? –