今天,我正在阅读harmony:proper_tail_calls提案,我注意到在 references有一个链接,上面写着“Brendan discovers that ES5/strict enables TCO. ”
ES5/strict“启用”TCO 是什么意思?起初我认为正确的尾部调用的初始实现可以在 ES5/严格模式下使用。然而,这些基准测试表明情况显然并非如此:
- ES5/strict TCO (n = 10000)。
- ES5/strict TCO (n = 1000)。
我在上述基准测试中使用了以下两个函数:
function without_tco(x) {
if (x === 0) return x;
return without_tco(x - 1);
}
function with_tco(x) {
"use strict";
if (x === 0) return x;
return with_tco(x - 1);
}
无论如何,我的问题是:如何在 ES5/严格模式下“启用”正确的尾部调用?
最佳答案
这意味着严格模式使得正确尾部位置的调用保证能够作为尾部调用实现,因为它禁止任何可能干扰优化的事情;即严格模式函数无法通过 caller
属性访问。它并不意味着“启用”,因为 Firefox 已经实现了它。
关于javascript - 如何在 ES5/严格模式下启用正确的尾部调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30409169/