替代绑定功能?

Alternative to bind function?

所以我正在阅读函数式编程和 V8 代码优化,我决定检查 bind 函数是否可由 V8 优化?

所以我阅读了本机 javascript 代码并被这些代码行击中,

 var newfn = function() {
    // Combine the static args and the new args into one big array
    var args = boundargs.concat(Array.prototype.slice.call(arguments));
    return fn.apply(self, args);
  };

这行代码清楚地表明,根据 MDN,对参数对象的处理将导致返回的函数无法被 v8 优化。 所以问题是我可以使用他们的任何 NATIVE 替代绑定吗?

资源

我会尝试将我的评论总结成一个答案。

您的问题引用了一些 Javascript 代码,这些代码实现了 Function.prototype.bind() 之类的东西,它来自 Chromium 存储库。老实说,我不知道该代码的来源,但是当我查看代表 V8 上当前活跃开发的 V8 repository 时(据我所知),您引用的代码无处可寻。我查看了 V8 存储库中 "bind" 上的 35 页搜索结果,我搜索了您引用的代码中的评论中出现的几个有点独特的词,我可以找到其中的 none在当前的 V8 存储库中。

并且,在 current V8 repository, here and here.

中有几个 "native code" 类 Function.prototype.bind 功能的 C++ 实现

所以,我得出结论,您从 Chromium 引用的类似绑定的 Javascript 代码当前不是 V8 的一部分,并且 V8 使用 Function.prototype.bind 的本机 C++ 代码实现,但没有JS优化问题。所以你关于寻找替代品的问题并不是真的有效,因为 Function.prototype.bind 的内置实现似乎没有你担心的任何优化问题。


我熟悉您链接到的优化文档以及您如何必须非常小心地使用 arguments 对象以避免破坏某些 Javascript 优化。但是,该问题不适用于使用本机 C++ 代码完成的 Function.prototype.bind 实现,因为这些优化问题仅适用于使用 Javascript 编写的代码,而不适用于使用 C++ 编写的代码。