无意中看到这样一个题目:利用闭包实现一个add函数,使得
add(1,2)=3,add(1)(2)=3。
以前看过闭包的概念,平时写js时也有意无意的用到过闭包,但是这个题目,一开始看到的时候还真是有点没思路。
不过静下心来,把问题进行了分解,之后就有了答案。
我的代码如下:
function add(x,y){
// 当实参的数量大于等于2时,则此时返回前两个参数之和
if (arguments.length >= 2) {
return x + y;
}
// 当实参的数量为1时,此时返回一个带一个参数的匿名函数,当执行此匿名函数的时候返回外层和内部函数之和
else if (arguments.length == 1) {
return function(z){
return x + z;
}
}
// 如果没有传参数时,则直接返回undefined
else if (arguments.length == 0) {
return undefined;
}
}
// 执行结果检验
add(1,2); // 3
add(1)(2); // 3
add(1,2,3,4); // 3