• js中sum(2,3,4)和sum(2)(3)(4)都返回9并要求扩展性(函数柯里化)


    网上有很多关于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>

  • 相关阅读:
    No module named cv2 报错处理
    CentOS 7自动以root身份登录GNOME桌面
    OpenVINO在linux下安装
    openvino资源
    electron-builder打包跳过publish
    Electron基础
    druid socket timeout超时15分钟(转载)
    第六次作业
    C语言感悟
    第五次作业
  • 原文地址:https://www.cnblogs.com/qdcnbj/p/8436985.html
Copyright © 2020-2023  润新知