最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【无言小记】函数式编程相关1-头等函数

    正文概述 掘金(无言非影)   2021-07-03   631

    上一篇 【无言小记】初识函数式编程


    First-class Function (函数是一等公民/头等函数)

    • 有如下特性:
      1. 函数可以被赋值给一个变量;
      2. 函数可以被当作参数传递给其他函数;
      3. 函数可以作为另一个函数的返回值。

    1. 把函数赋值给变量

      // 将匿名函数赋值给变量
      const fn = function() {
        console.log("fn_bar");
      }
      fn(); // fn_bar
    
      // 将有名称的函数赋值给变量
      const fn2 = function name() {
        console.log("fn2_bar");
      }
      fn2(); // fn2_bar
    

    示例:

      const SayHi = {
        a: (v) => `${v} a`,
        b: (v) => `${v} b`,
        c: (v) => `${v} c`,
      };
    
      // 优化前 =====================================
      const Controller = {
        a(v) {
          return SayHi.a(v);
        },
        b(v) {
          return SayHi.b(v);
        },
        c(v) {
          return SayHi.c(v);
        },
      };
    
      console.log(Controller.a("hi~")); // hi~ a
    
      // 优化后 =====================================
      const Controller = {
        a: SayHi.a, // 这里是把一个方法赋值给另一个方法,不是方法的调用
        b: SayHi.b,
        c: SayHi.c,
      };
      console.log(Controller.a("hi~")); // hi~ a
    

    2. 传递一个函数作为参数

    • 头等函数中-函数当作值或者说是变量: 下面代码片段中: callback() 函数作为 sayHi() 函数的参数。
      function callback() {
        return "Hello, ";
      }
      function sayHi(callback, name) {
        console.log(callback() + name);
      }
      // 传递 `callback` 作为 `sayHi` 函数的参数
      sayHi(callback, "wuyanfeiying!"); // Hello, wuyanfeiying!
    
    • 我们把一个函数作为参数传递给另外一个函数,那么我们就称这个函数为回调函数。sayHi() 函数就是一个回调函数
    • 回调与同步、异步并没有直接的联系,回调只是一种实现方式,既可以有同步回调,也可以有异步回调,还可以有事件处理回调和延迟函数回调,这些在我们工作中有很多的使用场景。

    3. 返回一个函数

    函数可被作为来对待,以下示例中,sayHi()返回一个匿名函数,有两种调用的方式:

    • 方式一:用一个变量先接受sayHi()返回的值, 之后再调用它里面被返回的函数
    • 方式二:使用双括号 ()() 来调用 sayHi() 返回的函数
      function sayHi() {
        // 返回一个匿名函数
        return function () {
          console.log("Hi~");
        };
      }
      // 方式一:
      const foo = sayHi();
      foo(); // Hi~
    
      // 方式二
      sayHi()(); // Hi~
    
      function(){
      // ...
      }();
    
    
    • 通过匿名函数可以实现闭包
      • 闭包是可以访问在函数作用域内定义的变量的函数。若要创建一个闭包,往往都需要用到匿名函数。
    • 模拟块级作用域,减少全局变量。执行完匿名函数,存储在内存中相对应的变量会被销毁,从而节省内存。
    • 一个返回另外一个函数的函数被称为高阶函数。
    • 编写高阶函数,就是让函数的参数能够接收别的函数。
    • JS中常见的三种高阶函数:map()reduce()filter()

    小结

    总之,在JavaScript中,函数没什么特别之处,和JS中的任何其他数据类型一样,我们可以把函数赋值给变量或存储到数组中,还可以作为另一个函数的参数和返回值,甚至我们可以在程序运行的时候通过new Function()来构造一个新的函数。

    附录

    • First-class Function(MDN)
    • 头等函数(维基百科)
    • 函数式编程指北
    • 关于js中的回调函数callback,通俗易懂
    • js中的匿名函数

    起源地下载网 » 【无言小记】函数式编程相关1-头等函数

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元