美文网首页深入JavaScript
深入JavaScript Day07 - 纯函数、柯里化、组合函

深入JavaScript Day07 - 纯函数、柯里化、组合函

作者: 望穿秋水小作坊 | 来源:发表于2022-01-14 11:03 被阅读0次

    一、纯函数

    1、什么是纯函数?

    • 确定的输入,一定会产生确定的输出;
    • 函数在执行过程中,不能产生副作用;
    image.png

    2、副作用的英文是什么?为什么程序产生副作用不好?

    • side effect
    • 【副作用往往是产生bug的"温床"】
    image.png

    3、纯函数的优势?

    image.png image.png

    二、柯里化

    1、什么是柯里化?有什么用?

    • 让函数的职责变得更加单一
    image.png image.png

    2、利用柯里化思想,实现add5函数?

    • 如果我们有一个add功能,每次都是x加上五,我们的代码可能如下
    function sum(num1, num2) {
      return num1 + num2;
    }
    
    console.log(sum(5, 10));
    console.log(sum(5, 20));
    console.log(sum(5, 30));
    console.log(sum(5, 40));
    
    • 柯里化后
    function makeAdd(num1) {
      return function (num2) {
        return num1 + num2;
      };
    }
    
    var add5 = makeAdd(5);
    
    console.log(add5(10));
    console.log(add5(20));
    console.log(add5(30));
    console.log(add5(40));
    
    • 这样就让函数功能更加单一了

    三、组合函数

    1、什么是组合函数?

    • 让多个函数按照固定的顺序进行执行


      image.png

    2、组合函数的例子?

    • 未使用组合函数
    function work(name) {
      return name + "先工作,";
    }
    
    function eat(name) {
      return name + "先吃饭,";
    }
    
    function sleep(name) {
      return name + "最后工作,";
    }
    
    var result = sleep(eat(work("why")));
    console.log(result);
    
    
    • 使用组合函数,将函数组合起来,供给外部简单调用(门面模式)
    function work(name) {
      return name + "先工作,";
    }
    
    function eat(name) {
      return name + "先吃饭,";
    }
    
    function sleep(name) {
      return name + "最后工作,";
    }
    
    function compose(f1, f2, f3) {
      return function (name) {
        return f3(f2(f1(name)));
      };
    }
    
    var flow = compose(work, eat, sleep);
    
    console.log(flow("why"));
    
    image.png

    相关文章

      网友评论

        本文标题:深入JavaScript Day07 - 纯函数、柯里化、组合函

        本文链接:https://www.haomeiwen.com/subject/gxkacrtx.html