• 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

     未完待续。。。

  • 相关阅读:
    20155226《网络攻防》 实验4 恶意代码分析
    20155226《网络攻防》 Exp3 免杀原理与实践
    20155226 Exp2 后门原理与实践
    20155226 《网络攻防》 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155226 《信息安全系统设计基础》课程总结
    《基于Arm实验箱的国密算法应用》课程设计 结题报告
    2015520吴思其 基于《Arm试验箱的国密算法应用》课程设计个人报告
    20155220 Exp9 Web安全基础实践
    20155220 《网络对抗》Exp 8 Web基础
    20155220 《网络对抗》实验七 网络欺诈防范
  • 原文地址:https://www.cnblogs.com/codexlx/p/14547892.html
Copyright © 2020-2023  润新知