网上有很多关于sum(1)(2)(3),sum(1,2,3)之类的面试题要求输出相同的结果6并要求可以满足扩展,即有多个参数时也能符合题设的要求,所以自己写了部分例子可以大概满足这些面试题的要求
<!DOCTYPE html>
<html lang="en">
<head>
???<meta charset="UTF-8">
???<title>Document</title>
</head>
<body>
???<script>
???//案例1
??????? //sum(2,3)和sum(2)(3)均能输出outPut5,这个问题较为简单,只要返回一个函数即可,本例中使用了es6语法
???????// function sum(x=0,y){
???????// ????if([...arguments][1]==undefined){
???????// ????????let befor = [...arguments][0];
???????// ????????return function suum(afte){
???????// ????????????let sum2 = befor+afte;
???????// ????????????console.log(`outPut${sum2}`);
???????// ????????}
???????// ????}
???????// ????else{
???????// ????????????let sum1 = x+y;
???????// ????????????console.log(`outPut${sum1}`); ???????
???????// ????????}
???????// ????} ??
???????//
???????// sum(2,3); 输出outPut5
???????// sum(2)(3);输出outPut5
???????//案例二、add(2,3,4...)和add(2)(3)(4)...都输出相同结果的解决方案
???????
???????????????// function add(x) {
???????????????// ????var sum = x;
???????????????// ????var tmp = function (y) {
???????????????// ????sum = sum + y;
???????????????// ????return tmp;
???????????????// };
???????????????// tmp.toString = function () {
???????????????// ????return sum;
???????????????// };
???????????????// ????return tmp;
???????????????// }
???????????????// console.log(add(1)(2)(3)); ?//6
???????????????// console.log(add(1)(2)(3)(4)); ??//10
???????????????// console.log(add(1)(2)(3)(4)(5));//15
???????????????// console.log(add(1)(2)(3)(4)(5)(6));//21
???//扩展案例3、此函数使用es6实现输入sum(),sum(2,3,4...)多个值相加,还有sum(2)(3)(4)...等多个数值分别相加的值相等,此案例也是最完整的解决方案
???????function sum(...args){
???????????????if([...args].length==1){
???????????????????let sum2 = [...args][0];
???????????????????var suum = function (y){
???????????????????????sum2 +=y;
???????????????????????console.log(`output ?${sum2}`)
???????????????????????return suum;
???????????????????}
???????????????????suum.valueOf = function(){
???????????????????????return sum2;
???????????????????}
???????????????????????return suum;
???????????????}
???????????????else{
???????????????????let sum1 = 0;
???????????????????for(var i = 0;i<[...args].length;i++){
???????????????????????sum1 += [...args][i]; ???????
???????????????????}
???????????????????console.log(`outPut1 ?${sum1}`);
???????????????} ?
???????????????} ??
???????????sum(); //outPut1 ?0
???????????sum(2,3,4);//outPut1 ?9
???????????sum(2)(3)(4)(5);//outPut1 ?5//outPut1 ?9//outPut1 ?14
???????????//每加一次就会输出一次Sum。如果不想输出三次则可以在函数中加一个valueOf方法或者toString方法。然后将Summ函数中的console去掉。
???????????//然后console.log(sum(2)(3)(4)(5));即可
???????//感兴趣的朋友可以直接复制粘贴看效果即可
???</script>
</body>
</html>
js中sum(2)(3)(4)返回9和sum(2,3)和sum(2)(3)都返回5并要求扩展性
原文地址:https://www.cnblogs.com/qdcnbj/p/8436985.html