js中关于柯里化(lodash)的理解

2018-03-26  本文已影响0人  lj51

个人笔记,理解错了也请原谅~

import { curry } from 'lodash';
    
var match = curry((reg, str) => str.match(reg));
var filter = curry((f, arr) => arr.filter(f));
var haveSpace = match(/\s+/g);
    
filter(haveSpace)(["abcdefg", "Hello World"])

lodash是一个函数式编程的库

var match = curry((reg, str) => str.match(reg));

我们可以理解为

var match = function (reg) {
    return function (str) {
        return str.match(reg)
    }
}

var filter = curry((f, arr) => arr.filter(f));

我们理解为:

var filter = function (f) {
    return function (arr) {
        return arr.filter(f)
    }
}

var haveSpace = match(/\s+/g);

我们理解为:

function (str) {
        return str.match(/\s+/g)
    }

那么,现在我们再来理解一下:

filter(haveSpace)(["abcdefg", "Hello World"])

分开操作一下,先执行 filter(haveSpace)
得到一个函数,我们赋值给func1:

var func1 = function (arr) {
    return arr.filter(haveSpace)
}

继续执行,不就是相当于:

arr = ["abcdefg", "Hello World"]
func1(arr)

func1(arr) 返回的不就是一个filter方法,我们给他传进去一个函数,如下

arr = ["abcdefg", "Hello World"]

haveSpace = function (str) {
        return str.match(/\s+/g)
    }
    
arr.filter(haveSpace)
上一篇下一篇

猜你喜欢

热点阅读