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)