• JS—高阶函数


    高阶函数指的是至少满足下列条件之一的函数:

    • 函数可以作为参数被传递
    • 函数可以作为返回值输出

     1.函数作为参数传递

    把函数作为参数传递,这代表我们可以抽离出一部分容易变化的业务逻辑,把这部分业务逻辑放在函数参数中,这样一来可以分离业务代码中变化与不变的部分。其中一个重要应用场景就是常见的回调函数。以下是常见场景:

    场景一:回调函数

    var getUserInfo = function( userId, callback ){ 
      $.ajax( 'http://xxx.com/getUserInfo?' + userId, function( data ){ 
         if ( typeof callback === 'function' ){ 
           callback( data ); 
        } 
      }); 
    } 
    getUserInfo( 13157, function( data ){ 
      alert ( data.userName ); 
    });

    回调函数应用不仅只在异步请求中,当一个函数不适合执行一些请求时,我们也可以把这些请求封装成一个函数,并把它作为参数传递给另一个函数,“委托“给另一个函数来执行

    场景二:Array.prototype.sort

    这是数组的排序API:

    [2,4,1,6].sort( function(a,b){
      return a-b  
     })
    
    // [1,2,4,6]

    可以看到,sort中我们的目的是对数组进行排序,这是不变的部分;使用什么规则去排序,这是可变的部分。

    [2,1,3].sort(function(a,b){ return a-b })  // [1,2,3]
    [2,1,3].sort(function(a,b){ return b-a })  // [3,2,1]

    2.函数作为返回值输出

     相比把函数作为参数传递,函数作为返回值输出的应用场景更多。让函数继续返回一个可执行的函数,意味着运算过程是可延续的。

    例如一个判断对象是不是数组,可以把这个判断的代码提取到一个函数中,然后将其返回值作为判断的结果:

    let isArr = function(obj){
        return Object.prototype.toString.call(obj) === '[object Array]'
    }
    
    console.log(isArr([]));  // true
    console.log(isArr({}));  // false

    3.AOP

     AOP(面向切面编程):的主要作用是把一些跟核心业务逻辑模块无关的功能(日志统计、安全控制、异常处理等)抽离出来。然后再通过“动态织入”的方式掺入业务逻辑模块中。好处是可以保持业务逻辑模块的纯净和高内聚行,其次可以很方便的复用这些抽离的功能模块。

    在JS中将一个函数“动态织入”到另一个函数中就是使用了JS中ES5的继承,即prototype来实现

    4.高阶函数的其他应用

    1.函数柯里化(function currying)

      又称部分求值。一个柯里化函数首先会先接受一些参数,接收了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数中形成的闭包中被保存起来。待到函数被整整需要求值的时候,之前传入的所有参数都会被一次性用于求值。

    let isArr = function(obj){
      return Object.prototype.toString.call(obj) === '[object Array]'
    }

    console.log(isArr([]));  // true
    console.log(isArr({}));  // false

     未完待续。。。

  • 相关阅读:
    (原创)攻击方式学习之(4) 拒绝服务(DOS/DDOS/DRDOS)
    gdb调试程序
    找找看XSS漏洞!!!
    C++实现发送HTTP请求
    Python天天美味(32) python数据结构与算法之堆排序
    (原创)攻击方式学习之(3) 缓冲区溢出(Buffer Overflow)
    Python天天美味(30) python数据结构与算法之快速排序
    CoderZh首款Python联机对战游戏 NancyTetris1.0倾情发布(一)
    ASCII表查看
    wxpython学习笔记
  • 原文地址:https://www.cnblogs.com/codexlx/p/14547892.html
Copyright © 2020-2023  润新知