Cam*_*all 0 javascript functional-programming function
说我有:
myArray = [1,2,3];
Run Code Online (Sandbox Code Playgroud)
并说我在其他地方有一个util函数:
add3 = function(val) {
return val+3;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想将它用作地图函数的回调,我必须做这样的事情:
add3Callback = function(currentValue, index, array) {
return add3(currentValue);
}
myArray.map(add3Callback);
Run Code Online (Sandbox Code Playgroud)
最好是地图回调不需要额外的两个参数,因为现在我必须为所有我的util函数添加包装器以便将它们与map一起使用,这违背了在第一个中使用map的一些原因地点.
我在这里错过了什么?为什么这些参数有用,其他语言似乎没有这样做.
map 提供这些参数是为了方便,但它们不是必需的,你得到的结果与:
myArray.map(add3)
Run Code Online (Sandbox Code Playgroud)
如果你有一个可以使用多个参数的函数,你可以将它限制为一个参数:
myArray.map(unary(console.log))
Run Code Online (Sandbox Code Playgroud)
哪里:
function unary(f) {
return function(x) {
return f(x)
}
}
Run Code Online (Sandbox Code Playgroud)
你可以做到这一点binary,ternary,nary...
请注意,JS中的任何函数都不需要通过名称传递任何参数,这样做:
function f(a, b, c) {
return [a, b, c]
}
Run Code Online (Sandbox Code Playgroud)
是相同的:
function f() {
return [arguments[0], arguments[1], arguments[2]]
}
Run Code Online (Sandbox Code Playgroud)
您的回调函数不需要接受额外的参数.map将传递三个参数,但您的函数完全可以忽略它们,甚至不在参数列表中列出它们.
这完全有效:
myArray.map(function (currentValue) {
return add3(currentValue);
});
Run Code Online (Sandbox Code Playgroud)
因此也是如此:
myArray.map(add3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |