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

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

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

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

  1. ES5/strict TCO (n = 10000)。
  2. 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/

相关文章:

javascript - 强制使用特定的 ES 版本

javascript - 如何导出ES6中保留名称的变量?

javascript - 即使代码中不存在,也会强制使用 strict

javascript - 是否可以测试不同 Ecma 脚本版本的 Javascript 代码?

javascript - 在另一个上下文中设置变量

javascript - 为什么严格模式的activator 'use strict'是一个字符串?

javascript - 如何从 VSCode 扩展执行本地 bash 代码

javascript - ASP.NET Core - 运行多个 Angular 2 应用程序

javascript - 我可以从哪个动画中选择一个特定的百分比来继续吗?

asp.net - 禁止使用 jquery 在所有输入文本框中输入少量字符,例如 .'<' 、 '>'