语法“foo(a)(b)”如何有用
How might the syntax `foo(a)(b)` be useful?
今天我发现了一种在javascript:中添加2个数字的奇怪方法
基本上,方法的调用看起来是这样的:add(5)(6)
,方法的声明是:
function add(x) {
return function(y) { return x + y; };
}
好的,我明白了。add
函数不返回数字,而是返回将第一个数字与第二个数字相加的匿名函数。但这有什么意义(它如何有帮助)?
除了让其他人感到困惑或编写某种模糊的恶意软件之外,它到底在哪里有用?
显然,调用add(5)(6)
并不太有用——您宁愿编写5 + 6
,或者,如果它真的是一个函数,则编写add(5, 6)
。
最大的好处是在函数式编程中,您应该传递一个函数(callback!),这在数组utils中最为突出。例如:
[1, 2, 3].map(add(5)) // [6, 7, 8]
您也可以将其用于相当复杂的函数的组合,而不必处理函数表达式。如果我们没有这个现成的add
函数,在上面的例子中,我们将需要编写
[1, 2, 3].map(function(y) {
return 5 + y;
}) // [6, 7, 8]
…并且每次对于每个不同的CCD_ 7。
让我们看看一个在野外更常见的函数pluck
:
function pluck(prop) {
return function(obj) {
return obj[prop];
}
}
此函数接受一个属性名称并返回一个新函数,该函数在给定对象的情况下返回该对象的属性。
这对于将对象数组映射到这些对象的特定属性数组非常有用:
var names = people.map(pluck('name'));
现在,如果只需要一次性执行此操作,则无需创建专用的pluck
函数。但是,如果多次执行此操作,则可以避免代码重复。
您不一定会像前面描述的那样使用它,但如果您想传递一个"给结果加5"的函数,您可以执行
var addsFive = add(5);
// some other code, perhaps passing this var to another function
var result = addsFive(6); // returns 11
这种"部分"函数调用的技术被称为currying——另一个SO问题详细介绍了它如何/在哪里有用,并提供了几个链接来帮助解释这个概念。
相关文章:
- 门户网站:当地时间有多有用
- 使用ScriptObjectMirror将数组结果从JavaScript转换为有用的东西
- Javascript中的模块模式和揭示模块模式是否仅在创建API时有用;s
- 带有CSS的数据属性就没那么有用了
- modernizr.js还有用吗
- 为什么我的按钮的 onClick() 方法没有用
- 为什么import关键字有用
- 依赖项注入w/JavaScript|有用或不有用
- 在混合应用程序开发中使用本地存储;本地数据库“-危险或有用
- I'我正在努力学习Angular——为什么不;t我的对象没有用ng repeat出现
- 我不;我没有用springmvc捕获我的javascript文件
- 获取比“[对象对象]”更有用的值进行调试
- 何时有时将对象类型定义为将实例绑定方法镜像为构造函数上的静态实用程序函数很有用
- 来自不同 jquery 文件的有用性函数
- 用于 Rails JSON API 的有用 nodejs 库
- read完全没有用Java Nashorn Javascript引擎定义
- JavaScript 和 jQuery 只对某些页面有用
- 为什么输入类型=文件中的更改没有用“form.serialzie()”标识
- FB.getLoginStatus对我有用,但对我的测试人员不起作用
- 为什么下划线说 _.initial 对参数对象特别有用