向函数调用(lodash)传递附加参数
Passing additional arguments to function call (lodash)
与以下模拟代码有关(_与lodash库有关):
var containerFunction = function () {
var opts = {data: value};
_.map(lines, functionForEach);
}
var functionForEach = function (line) {
Do something for each line passed in from the maps function.
Need to access opts in this scope.
return value;
}
参数行是从map函数接收的,但将opts参数传递给functionForEach函数的最佳方式是什么,同时保持上面的粗略模式(如果可能的话)。
我想的是:
_.map(lines, functionForEach(opts))
或者类似的东西可能会起作用,但显然不会。
有什么建议吗?
您有三种选择:
-
将
functionForEach
放入containerFunction
中。如果你不打算在其他地方使用functionForEach
,这是最有意义的。 -
写为:
var containerFunction = function () { var opts = {data: value}; _.map(lines, function(elt) { return functionForEach(elt, opts); }); } var functionForEach = function (line, opts) { Do something for each line passed in from the maps function. Need to access opts in this scope. return value; }
- 如果必须,请将
opts
作为第三个(thisArg
)参数传递给_.map
,并使用functionForEachvar
中的this
访问它
Lodash在函数组合方面有很好的实用程序,包括部分应用参数。然而,这实际上并不是那么简单。假设我们想要使用partialRight():
function functionForEach(item, i) { return item * i; }
_.map([1, 2, 3], _.partialRight(functionForEach, 2));
// → [0, 2, 6]
哎呀。这是不对的。原因是我们没有像预期的那样将参数传递给functionForEach()
。我们希望i
参数的值始终为2
,而item
是映射的集合值。
让我们试试其他东西:
_.map([1, 2, 3], _.ary(_.partialRight(functionForEach, 2), 1));
// → [2, 4, 6]
这样更好。问题是map()将该项作为第一个参数传递,同时传递另外两个参数(索引和集合本身)。由于我们不关心后两个参数,我们可以使用ary()来编写一个忽略它们的新函数。
这是另一种方法:
_.map([1, 2, 3], _.partial(_.rearg(functionForEach, 1, 0), 2));
// → [2, 4, 6]
这一次,我们使用rearg()来更改partial()函数参数的顺序。我发现这种方法不如partialRight()
的简单方法直观。
最后一个例子:
_.map([1, 2, 3], _.flow(_.identity, _.partialRight(functionForEach, 2)));
// → [2, 4, 6]
在这里,我们使用flow()高阶函数来组成回调。这个函数接受提供给它的参数,并将我们传递给它的函数链接在一起——上一个函数的输出是下一个函数。我们在这里使用identity()函数,因为它只是返回传递给它的第一个参数,这正是我们想要的。
最后一种方法类似于ary()
方法——它在做同样的事情。如果我们希望通过在functionForEach()
之前或之后传递更多函数来建立这种行为,那么flow()
方法是优越的。
看看_.partial
。文件:
部分
var containerFunction = function() {
var opts = { data: value };
_.map(lines, _.partial(functionForEach, opts));
};
var functionForEach = function (opts, line) { ... };
_.partial
返回一个新函数,该函数的参数在函数ForEach之前。在上面的例子中,_.partial
返回以下函数签名:
function (line) { ... }
用行调用return函数用行调用functionForEach,并选择默认值为_.partial
中作为参数传入的值。
- 具有多个参数的checkbox函数调用
- 使用评估函数调用 javascript 函数作为文本框 Asp.net 参数
- 使用onclick和javascript函数,在参数中调用js-var
- 循环变量作为异步函数调用中的参数
- 如何使用函数作为事件处理程序,以及如何使用参数直接调用函数
- 您将使用什么参数来调用此函数以获取指定的输出
- JavaScript 函数调用将 x && y 作为参数传递
- 如何使用一些变量参数从javascript函数调用 asp.net C#函数并从C#函数获取字符串返回
- 使用参数成功调用简单函数后出现意外警报,消息为“未定义”
- 不理解此函数调用中的参数
- 如果我有一个变量,分配给函数调用的值,如果函数调用的参数更改,是否可以更新该变量
- 防止单击和检索函数调用的参数
- 我可以通过beforeSent事件更改jQuery.ajax的函数调用参数(在数据中发送)吗?
- 从函数调用控制器并向其传递 URL 编码参数
- 添加参数时调用javascript函数停止工作,这真的不大声吗
- 将参数传递给事件触发器中的函数调用
- 在函数调用后将参数传递给 JavaScript 函数
- 使用来自 json 对象的参数动态调用方法/函数
- 正则表达式匹配特定的函数调用并使用 javascript 捕获参数
- 如何在函数调用中自动添加参数