1. 程式人生 > >js中sum(2)(3)(4)返回9和sum(2,3)和sum(2)(3)都返回5並要求擴展性

js中sum(2)(3)(4)返回9和sum(2,3)和sum(2)(3)都返回5並要求擴展性

lang itl ron var 就會 bsp tle 關於 網上

網上有很多關於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並要求擴展性