js函数式编程相关

1. 高阶函数

  • 将函数作为输入或返回值
function foo(x){
    return function(){
        return x
    }
}
function foo(x,bar){
    return bar(x)
}
  • 应用实例:
    ES5提供的一些数组方法
var points=[40,100,1,5,25,10]
points.sort((a,b)=>a-b)

为相同事件注册不同回调函数(复杂业务逻辑的解耦)

var emitter=new events.EventEmitter()
emitter.on('event_foo',function(){
    //...
})

2. 函数Curry化(偏函数)

  • 创建一个调用另一个部分(参数或变量已经预置的函数)的函数
var toString=Object.prototype.tosString()
var isSring=function(obj){
    return toString.call(obj)==='[object String]'
}
var isFunction=function(obj){
    return toString.call(obj)==='[object Function]'
}
//函数改造
function isType=function(type){
    return function(obj){
        return toString.call(obj)==='[object '+type+']'
    }
}
var isString=isType('String')
var isFunction=isType('Function')
  • 异步编程的应用
    Underscore提供的after方法
//需要调用多次才真正执行实际函数的函数
_.after=function(times,func){
    if(times<0){return func()}
    return function(){
        if(--times<1){  //times闭包
            return func.apply(this,arguments)
        }
    }
}

你可能感兴趣的:(js函数式编程相关)