Module: functions

扩展函数能力的函数

Functions

after

after(fn, count?): Function

创建一个包含指定函数逻辑且内置计数的包装函数并返回。 该函数每调用一次计数会减一,直到计数为0后生效。可用于异步结果汇总时只调用一次的场景

Example

//undefined, undefined, 'data saved'let saveTip = _.after(()=>'data saved',2);console.log(saveTip(),saveTip(),saveTip())

Parameters

NameTypeDescription
fnFunction需要调用的函数
count?number计数

Returns

Function

包装后的函数


alt

alt(v, interceptor1, interceptor2): any

传递v为参数执行interceptor1函数,如果该函数返回值未定义(undefined)则执行interceptor2函数,并返回函数返回值。 用于函数链中的分支操作

Example

//falseconsole.log(_.alt(9,v=>false,v=>20))

Parameters

NameTypeDescription
vunknown
interceptor1Function(v)
interceptor2Function(v)

Returns

any

函数返回值


bind

bind(fn, thisArg, ...args?): Function

创建一个新的函数,并且绑定函数的this上下文。默认参数部分同partial()

Example

const obj = { text:'Func.js', click:function(a,b,c){console.log('welcome to '+this.text,a,b,c)}, blur:function(){console.log('bye '+this.text)}}//自动填充参数let click = _.bind(obj.click,obj,'a',undefined,'c');click('hi')//1秒后执行,无参数setTimeout(click,1000)

Since

0.17.0

Parameters

NameTypeDescription
fnFunction需要调用的函数
thisArgunknownfn函数内this所指向的值
...args?any参数可以使用undefined作为占位符,以此来确定不同的实参位置

Returns

Function

绑定this的新函数


bindAll

bindAll(object, ...methodNames): Record<UnknownMapKey, any>

批量绑定对象内的函数属性,将这些函数的this上下文指向绑定对象。经常用于模型中的函数用于外部场景,比如setTimeout/事件绑定等

Example

const obj = { text:'Func.js', click:function(a,b,c){console.log('welcome to '+this.text,a,b,c)}, click2:function(){console.log('hi '+this.text)}}//自动填充参数_.bindAll(obj,'click',['click2']);//1秒后执行,无参数setTimeout(obj.click,1000)//事件top.onclick = obj.click2

Since

0.17.0

Parameters

NameTypeDescription
objectRecord<UnknownMapKey, any>绑定对象
...methodNames(string | string)属性名或path

Returns

Record<UnknownMapKey, any>

绑定对象


compose

compose(...fns): Function

创建一个新的函数,该函数的参数会传递给第一个fns函数来计算结果,而结果又是第二个fns函数的参数,以此类推, 直到所有函数执行完成。常用于封装不同的可重用函数模块组成新的函数或实现惰性计算,比如

let checkName = _.compose(_.trim,v=>v.length>6); checkName(' holyhigh') //=> true checkName(' ') //=> false

Example

// Holyhighlet formatName = _.compose(_.lowerCase,_.capitalize);console.log(formatName('HOLYHIGH'))

Parameters

NameType
...fnsFunction

Returns

Function

组合后的入口函数


delay

delay(fn, wait?, ...args?): Timeout

启动计时器,并在倒计时为0后调用函数。 内部使用setTimeout进行倒计时,如需中断延迟可以使用clearTimeout函数

注意,函数并不提供防抖逻辑。如果需要处理重复调用必须自己处理计时器id

Example

//1000ms 后显示some text !_.delay(console.log,1000,'some text','!');

Parameters

NameTypeDescription
fnFunction需要调用的函数
wait?number倒计时。单位ms
...args?any传入定时函数的参数

Returns

Timeout

计时器id


fval

fval<T>(expression): T

类似eval,对表达式进行求值并返回结果。不同于eval,fval()执行在严格模式下

注意,如果页面设置了CSP可能会导致该函数失效

Example

//5console.log(_.fval('3+2'));//{name:"func.js"}console.log(_.fval("{name:'func.js'}"));

Type parameters

Name
T

Parameters

NameTypeDescription
expressionstring计算表达式

Returns

T

表达式计算结果


once

once(fn): Function

创建一个包含指定函数逻辑的包装函数并返回。该函数仅执行一次

Example

//2748, undefinedlet parseInt2 = _.once(parseInt);console.log(parseInt2('abc',16),parseInt2('abc',16))

Parameters

NameTypeDescription
fnFunction需要调用的函数

Returns

Function

包装后的函数


partial

partial(fn, ...args): Function

创建一个新的函数,该函数会调用fn,并传入指定的部分参数。

partial()常用来创建函数模板或扩展核心函数,比如

let delay2 = _.partial(setTimeout,undefined,2000);delay2(()=>\{console.log('2秒后调用')\})

Example

//2748let hax2num = _.partial(parseInt,undefined,16);console.log(hax2num('abc'))//9let square = _.partial(Math.pow,undefined,2);console.log(square(3))//¥12,345.00元let formatYuan = _.partial(_.formatNumber,undefined,'¥,000.00元');console.log(formatYuan(12345))//[func.js] hi...let log = _.partial((...args)=>args.join(' '),'[func.js][',undefined,']',undefined);console.log(log('info','hi...'))

Parameters

NameTypeDescription
fnFunction需要调用的函数
...argsany参数可以使用undefined作为占位符,以此来确定不同的实参位置

Returns

Function

部分应用后的新函数


tap

tap<T>(v, interceptor): T

传递v为参数执行interceptor函数,然后返回v。常用于函数链的过程调试,比如在filter后执行日志操作

注意,一旦函数链执行了shortcut fusion,tap函数的执行会延迟到一个数组推导完成后执行

Example

//shortut fusion中的tap只保留最后一个_([1,2,3,4]).map(v=>v*3).tap(v=>console.log(v))//被覆盖.filter(v=>v%2===0).tap(v=>console.log(v))//会延迟,并输出结果[6,12].join('-').value()

Type parameters

Name
T

Parameters

NameTypeDescription
vT
interceptorFunction(v);如果v是引用值,改变v将影响后续函数流

Returns

T

v