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

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

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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容