higherjs
版本: 0.7.4
简介:提供Javascript常见的高阶函数
安装
直接引入dist目录下的higherjs.min.js
或
使用npm安装,运行
npm install higherjs
使用方法
直接引入higherjs.min.js文件会将higherjs挂载至全局对象
通过npm安装的可以使用按需加载
也可以直接引入higherjs
API
1. higherjs.curry( fn : function, length? : number|curryOption, limited? : boolean, mode? : string)
函数柯里化
柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术
第一个参数传入需要柯里化的函数
{ console}let curryLog = 23 // 1,2,3
第二个可选参数,可以显式设置参数的长度限制,默认为函数的参数长度。
let curryLogTwoNums = 2 // 1,2,undefined
第三个可选参数,是否限制参数长度,如果为假值则无视第二个参数,并提供finish方法。使用无参调用或finish方法结束调用。
{ console}let curryUnlimitedLog = 234 // 1,2,3,4321 // 4,3,2,1
第四个可选参数,可以设置'parallel'来使用并行模式的柯里化,默认使用'pipe'管道流模式
//注意 我们将 curryFunc(1)(2)(3)(4) 这样的调用称为pipe模式,也就是默认的模式let parallelLog = parallelLog // 1,2,3//注意 在使用无限制'parallel'模式时调用finish后会清除缓存,但是无参调用不会触发这种行为。 // 1,2,3 // 1,2,3,3
现在也可以提供一个option对象,传入对象的行为可读性更高 推荐
//为了使你的柯里化函数更加可控,当你设置limit:true时你始终应该提供length属性//相当于 curry(func,4,true,'parallel')curryFunc2curryFunc4curryFunc2curryFunc4 //[2,4,2,4] //相当于 curry(func) 或者 curry(func,0,false)curryFunc2235 //[2,3,5]
pipe模式允许出现在parallel模式
let { console} //省略limit参数即为不限制参数长度,所以没必要传入length属性let curryFunc = 8 //pipe模式允许出现在parallel模式 //[2,4,6,8]
2. higherjs.Pubsub(类)
发布订阅类
支持订阅前发布自动缓存
支持异步订阅
//实例化一个发布订阅对象//提供一个key并订阅一个函数pubsub.subscribe'getSum', //发布key对应的函数队列pubsub.publish'getSum', 2, 4 // [6] //清除key对应的函数队列pubsub.clear'getSum' //同一个key订阅两个函数pubsub.subscribe'getArr', returnOriginalArrpubsub.subscribe'getArr', returnStringArr console.logresult //[ [2,4] , ['2','4'] ] //支持订阅前发布自动缓存 pubsub.publish'pubBeforeSub', 'this is the first message'pubsub.publish'pubBeforeSub', 'this is the second message'//注意订阅完成后,缓存会清零console.logresult // ['this is the first message','this is the second message'] //支持异步订阅//异步订阅函数pubsub.subsribe 'addNumAsync', addNum, truepubsub.publish 'addNumAsync', 10console.log'before addNum execute' //'before addNum execute'// 11 //注意pubsub.publish( 'addNumAsync', 10)会返回一个Promise(resolved)对象,你可以继续调用then处理你订阅函数返回的数据promise.thenconsole.logres + 1 // 12
3. higherjs.debounce( fn : function, wait? : number, immediate? : boolean)
函数防抖
第一个参数是需要节流的函数
第二个可选参数,设置防抖的缓冲时间,默认1000ms
第三个可选参数,设置是否立即调用,默认true
返回防抖后的函数
4. higherjs.throttle( fn : function, wait? : number, immediate? : boolean)
函数节流
第一个参数是需要节流的函数
第二个可选参数,设置节流的缓冲时间,默认1000ms
第三个可选参数,设置是否立即调用,默认true
返回节流后的函数
5. higherjs.getSingle(fn : function)
函数单例(惰性)
唯一参数,传入需要成为单例的函数
返回一个单例模式的函数
更新说明
V0.7.0更新
新的API,可异步执行和订阅前缓存的发布订阅类Pubsub
V0.6.0更新
curry函数的第二个参数现在可以传入一个option参数
V0.5.0更新
用TypeScript重写项目,调整了目录结构
output //tsc编译后的文件
config //存放配置文件
src //源码
dist //webpack打包后的js文件
...
V0.4.0更新
新增getSingle函数(见API介绍)
提供了curry函数的第四个参数,可以传入"parallel"使用并行调用