如何在ES5 /严格模式下启用正确的尾调用?

时间:2015-05-23 05:22:24

标签: javascript ecmascript-5 strict ecmascript-harmony tail-call-optimization

今天,我正在阅读harmony:proper_tail_calls提案,我注意到在references中有一个链接,上面写着“Brendan discovers that ES5/strict enables TCO.

ES5 /严格“启用”TCO是什么意思?起初我认为在ES5 /严格模式下可以使用正确尾部调用的初始实现。然而,这些基准证明的情况显然不是这样:

  1. ES5/strict TCO(n = 10000)。
  2. ES5/strict TCO(n = 1000)。
  3. 我在上述基准测试中使用了以下两个函数:

    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 /严格模式下“启用”正确的尾部调用?

1 个答案:

答案 0 :(得分:2)

这意味着严格模式使得调用处于正确的尾部位置,保证能够实现为尾调用,因为它禁止任何可能干扰该优化的东西;即无法通过caller属性访问严格模式函数。在Firefox已经实现它的意义上,它并不意味着“启用”。