【发布时间】:2017-08-15 04:12:53
【问题描述】:
所以我正在阅读有关 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,对 arguments 对象的处理将导致返回的函数无法被 v8 优化。 所以问题是我可以使用他们的任何原生替代绑定吗?
资源
【问题讨论】:
-
你是说这段代码是V8中
.bind()的内置实现的一部分吗?如果是这样,你能提供一个链接参考吗? -
有一些方法可以避免使用
.bind(),但这些方法取决于实际的编程使用上下文,所以我们需要看到它才能提供这些替代方案(例如箭头函数或闭包) . -
您是如何得出 V8 不能/不优化
bind()或绑定函数的结论的?你的证据在哪里? -
我在这个 V8 存储库中找不到您的代码参考:github.com/v8/v8。我确实发现 C++ 代码看起来可能是
.bind()相关 here。 -
而且,this V8 code reference 看起来像是在定义
Function.prototype.bind以在我的 previous code reference 中使用 C++ 代码FastFunctionPrototypeBind。所以,我的结论是你的bind()代码参考不是V8 使用的。 V8 使用原生代码实现,不会出现您提到的优化问题。
标签: javascript node.js optimization native v8