高阶函数
一个函数可以接收另一个函数作为参数,这种函数称为高阶函数。
// 举个栗子:
function add (x,y,f){
return f(x) + f(y)
}
add(5,6,Math.abs) =>11
// 接收了函数f,并且把x,y参数传到函数f中
// es6写法
let add2 = (x,y,f) => f(x)+f(y)
console.log(add2(-1,5,Math.abs)) =>6
柯里化
把接受多个参数的函数变换成接受一个单一参数的函数,并且返回(接受余下参数而且返回结果的)新函数的技术。
张鑫旭的解释通俗又好笑,地址点这里
// 举个栗子
let add =(a,b)=>a+b
console.log(add(1,2))
// 正常写法,需要传递两个参数给add
// add(1)=>NAN(缺少一个参数)
let add2 = a=>b=>a+b
console.log(add2(1)(2))
// 柯里化写法,将参数变换成一个,延迟函数参数的传入
// add2(1) => function(b) {return a+ b}
柯里化特点
- 延迟参数传递,参数复用
- 代码短小,优雅,函数化,有点不好理解
多重箭头函数与柯里化
es5写法
let add = function(x){
return function(y){
return x+y
}
}
console.log(add(2)(4)) =>6
箭头函数写法
let add = x => y =>x+y
console.log(add(2)(4))
第一次看有点懵逼,看习惯就好了~