写一个按照下面方式调用都能正常工作的 sum 方法

console.log(sum(2,3)); // Outputs 5
console.log(sum(2)(3)); // Outputs 5
从这个输出的角度,我们需要求出函数的参数的和。
 function add(x){
var fir = arguments[0];
if (arguments.length ==2) {
return arguments[0]+ arguments[1];
}else{
return function(sec){
return fir + sec;
}
}
}
add(2)(3);
add(2,3);

这是我们需要缩写的sum函数。

后面遇到一个新的问题,实现如下语法的功能:

var a = add(2)(3)(4); //9

输出:

还有一个更高级的做法:

最后输出:

这种方式对于add(1)和add(1)(2)也能达到效果,但对add(1,2)没效果。但需要理解下。

还有一个终极版本:

 function add(){
var args = Array.prototype.slice.call(arguments);
var fn = function(){
var arg_fn = Array.prototype.slice.call(arguments);
return add.apply(null,args.concat(arg_fn));
}
fn.valueOf = function(){
return args.reduce(function(a,b){
return a + b;
})
}
return fn;
} console.log(add(1));
console.log(add(1,2)(3));
console.log(add(1,2)(3)(4));
console.log(add(1)(2)(3)(4)(5));

在这里使用到了Array.prototype.slice.call()方法,这种方法其实也可以单独写一篇文章了。这里就不在详述。

最新文章

  1. Java 使用 JRegistry-1.8.1 读取和设置 windows 注册表
  2. CentOS7搭建hadoop2.6.4+HBase1.1.6
  3. linux 命令之 insmod
  4. sqlite3里类似top的用法
  5. java静态代码块、初始化块和构造方法的执行顺序
  6. Python脚本控制的WebDriver 常用操作 <十九> 获取测试对象的状态
  7. 使用百度zrender, demo抛砖引玉.
  8. IQKeyboredManager使用
  9. Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem
  10. Apache的prefork模式和worker模式
  11. ServletContext加入和访问
  12. a标签传递参数
  13. GIT入门笔记(17)- 创建分支dev_lsq, 提交到代码
  14. BZOJ4858 : [Jsoi2016]炸弹攻击 2
  15. C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能
  16. 20170714xlVba多个工作簿转多个Word文档表格
  17. Object对象方法 cheet sheet
  18. 语音性别识别 - 使用R提取特征
  19. taro 填坑之路(三)taro 缓存
  20. 跳过图片反盗链js

热门文章

  1. php面向对象成员方法(函数)练习
  2. PAT甲级——【牛客练习A1004】
  3. re 模块 (正则的使用)
  4. CentOS 编译golang
  5. Java MySQL 批量查询数据,每次查询10条
  6. MVVM基础概念和理解
  7. 从0开始学习ssh之basedao
  8. JS实用插件
  9. C#端一个不错的订单号生成规则
  10. 查看MySql版本号命令