javascript - lodash.js 在 function.apply 上的部分应用

标签 javascript functional-programming underscore.js lodash

给定以下函数,_.partial 函数的使用会引发错误:

function foo(x, y) { return 1 + 2; }
p = _.partial(foo.apply, null);
p([1,2]);

我得到:

TypeError: Function.prototype.apply was called on [object Window], which is a object and not a function

我在这里做错了什么?还有其他方法可以实现我正在做的事情吗?

最佳答案

我相信这是你想要的:

function foo(x, y) { return x + y; }
p = Function.apply.bind(foo, null);
p([1,2]); // ===3

我最接近的下划线是通过 _.bind:

function foo(x, y) { return x + y; }
p = _.bind(foo.apply, foo, 0);
p([1,2]); // ===3

您可能还想考虑该函数的另一种灵活用法,对超过 2 个元素的整个数组求和:

 function foo(x, y) { return x + y; }
_.reduce([1,2,3,4,5], foo); // == 15

或使用 vanillaJS:

function foo(x, y) { return x + y; }
[1,2,3,4,5].reduce(foo); // == 15

关于javascript - lodash.js 在 function.apply 上的部分应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363051/

相关文章:

javascript - React - 没有依赖项数组的 useMemo 与空数组

functional-programming - "Mathematical state"函数式语言?

javascript - 这个函数是纯的还是不纯的?

haskell - 在 Haskell 的类型声明中符号 `!` 是什么意思?

javascript - 如何将多个单独的查询结果显示到单个下拉框中的选项中?

Javascript 字符串模板慢 vs knockoutjs 模板

javascript - 如何获取两个数组对象之间的差异项?

JavaScript + MySQL : use fields as parameter in result

javascript - polymer 铁-ajax : How to Bind data from input element to iron-ajax's body attribute

javascript - 在 Underscore 模板中获取 Backbone 集合的前 3 项