美文网首页
js中关于柯里化(lodash)的理解

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

作者: lj51 | 来源:发表于2018-03-26 01:25 被阅读0次

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

    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)
    

    相关文章

      网友评论

          本文标题:js中关于柯里化(lodash)的理解

          本文链接:https://www.haomeiwen.com/subject/mxllcftx.html