今天,我正在阅读harmony:proper_tail_calls提案,我注意到在references中有一个链接,上面写着“Brendan discovers that ES5/strict enables TCO.”
ES5 /严格“启用”TCO是什么意思?起初我认为在ES5 /严格模式下可以使用正确尾部调用的初始实现。然而,这些基准证明的情况显然不是这样:
我在上述基准测试中使用了以下两个函数:
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 /严格模式下“启用”正确的尾部调用?
答案 0 :(得分:2)
这意味着严格模式使得调用处于正确的尾部位置,保证能够实现为尾调用,因为它禁止任何可能干扰该优化的东西;即无法通过caller
属性访问严格模式函数。在Firefox已经实现它的意义上,它并不意味着“启用”。