将两个参数传递给 .map 回调函数

Passing two arguments to the .map callback function

R代表Ramda.js库,类似于Underscore.js

var test = [
  {p1: 1}
];

var get = R.curry(function(prop, obj) { return obj[prop]; });
console.log(R.map(get('p1'), test));

我对 R.map 回调的了解是它只需要一个参数,但在这里我们传递了两个参数 prop, obj 并且它正在工作?

we didn't use obj so it should be undefined --> return undefined[prop] right ?

这段代码证明 map 回调只接受一个参数

var test = [
  {p1: 1}
];

function fn(arg1, arg2) {
  return arg1 + ' ' + arg2 + '\n';
}

console.log(R.map(fn, test));

结果是

["[object Object] undefined"]

之所以有效,是因为 get 是柯里化函数。这意味着 get('p1') returns 一个接受一个参数的函数。在这种情况下,它 returns 像这样的函数:

function(obj) { return obj['p1']; });

这允许将其传递给 R.map 函数。

要了解柯里化,维基百科文章相当出色:https://en.wikipedia.org/wiki/Currying