前端是万能的

函数柯里化

2019-10-15  本文已影响0人  肆意木

定义

是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

为什么要这样做?

可以做到参数复用

提前确认,避免多次判断

延迟运行(bind的实现机制就是柯里化)

性能问题

存取arguments对象通常要比存取命名参数要慢一点

一些老版本的浏览器在arguments.length的实现上是相当慢的

使用fn.apply( … ) 和 fn.call( … )通常比直接调用fn( … ) 稍微慢点

创建大量嵌套作用域和闭包函数会带来花销,无论是在内存还是速度上

Demo

// 正常正则验证字符串 reg.test(txt)

// 函数封装后
function check(reg, txt) {
    return reg.test(txt)
}

check(/\d+/g, 'test')       //false
check(/[a-z]+/g, 'test')    //true

// Currying后
function curryingCheck(reg) {
    return function(txt) {
        return reg.test(txt)
    }
}

var hasNumber = curryingCheck(/\d+/g)
var hasLetter = curryingCheck(/[a-z]+/g)

hasNumber('test1')      // true
hasNumber('testtest')   // false
hasLetter('21212')      // false
上一篇下一篇

猜你喜欢

热点阅读