由一道面试题引起的arguments的思考
2024-10-08 01:37:17
写一个按照下面方式调用都能正常工作的 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()方法,这种方法其实也可以单独写一篇文章了。这里就不在详述。
最新文章
- Java 使用 JRegistry-1.8.1 读取和设置 windows 注册表
- CentOS7搭建hadoop2.6.4+HBase1.1.6
- linux 命令之 insmod
- sqlite3里类似top的用法
- java静态代码块、初始化块和构造方法的执行顺序
- Python脚本控制的WebDriver 常用操作 <;十九>; 获取测试对象的状态
- 使用百度zrender, demo抛砖引玉.
- IQKeyboredManager使用
- Target runtime Apache Tomcat v6.0 is not defined.	phyy	Unknown	Faceted Project Problem
- Apache的prefork模式和worker模式
- ServletContext加入和访问
- a标签传递参数
- GIT入门笔记(17)- 创建分支dev_lsq, 提交到代码
- BZOJ4858 : [Jsoi2016]炸弹攻击 2
- C#中泛型容器Stack<;T>;的用法,以及借此实现&rdquo;撤销/重做&rdquo;功能
- 20170714xlVba多个工作簿转多个Word文档表格
- Object对象方法 cheet sheet
- 语音性别识别 - 使用R提取特征
- taro 填坑之路(三)taro 缓存
- 跳过图片反盗链js