可以通过两种方式调用的单个函数
A single function that can be invoked in two ways
我想写一个可以用两种方式调用的函数:
sum(3,5); //8
或
sum(3)(5); //8
这显然是不够的:
function sum (a,b){
return a + b;
}
这里是我到目前为止的地方:
http://jsfiddle.net/marcusdei/a8tds42d/1/你可以这样做:
function sum (a,b){
if(b == undefined){
return function(b){
return a + b;
}
} else {
return a + b;
}
}
为什么(你为什么要这样做? - ans: homework)
function sum (a,b){
if(b === undefined)
{
return function summer(next){
return a + next;
}
}
return a + b;
}
更新小提琴:http://jsfiddle.net/a8tds42d/2/
就像另一个选择:
function sum (a,b) {
if (b === undefined) {
return sum.bind(null, a);
}
return a + b;
}
您需要的是编写一个curry函数。Kevin Ennis在这里详细介绍了如何实现。
https://medium.com/@kevincennis currying-in-javascript-c66080543528
下面是上面帖子中的函数(以防万一帖子消失了)
function curry( fn ) {
var arity = fn.length;
return (function resolver() {
var memory = Array.prototype.slice.call( arguments );
return function() {
var local = memory.slice(), next;
Array.prototype.push.apply( local, arguments );
next = local.length >= arity ? fn : resolver;
return next.apply( null, local );
};
}());
}
和小提琴
也可以用Ramda。js这里是Ramda
的用法http://bit.ly/1IfaVM5相关文章:
- 用于多个类事件Jquery的单个函数
- 使用JavaScript&jQuery在单个函数(Nodes&Stuff)中
- 多个事件,用于触发 Chrome 书签 API 中的单个函数
- Javascript 使用单个函数从另一段代码中取消 POST
- jQuery children().fadeOut() 然后执行单个函数
- JavaScript 中的单个函数多次调用
- 使用单个函数进行货币验证和格式化
- Jquery 对多个 ID 应用单个函数
- 角度 - 我可以在嵌套的 ng-repeat 中的多个对象上使用单个函数来触发该对象的 ng-show 吗?
- 如何将这些函数合并为具有属性的单个函数
- 带有两个ajax调用的单个函数
- 单个函数中有多个RegExp
- 声明对象以在单个函数中重复使用的范围
- Javascript装饰器模式-原型或单个函数
- require node.js模块在单个函数中与全局函数中对性能的影响
- 在单个函数中包装链接函数的Javascript
- 需要协助将jquery单个函数转换为具有多个函数的对象实例
- jQuery:对于类似的操作,使用单个函数而不是重复的函数
- 针对浏览器和NodeJS的单个函数模块的语法
- 在触发单个函数之前,等待所有.then()执行完毕