call与apply反柯里化? 什么是柯里化与反柯里化?
纯函数
函数结果只受传入参数影响,参数一定,结果一定。
高阶函数
一个函数可以接收另一个函数作为参数,这种函数称为高阶函数。
function add (x,y,foo){
return foo(x) + foo(y)
}
add(1,2,Math.abs) =>3
// es6写法
let add2 = (x,y,foo) => foo(x)+foo(y)
console.log(add2(-1,2,Math.abs)) =>3
柯里化(Currying)
接受一次性传入多个参数调用的函数,也可以传入部分参数调用,最后使它返回一个单一参数的函数去处理,并且返回。其中也可以传入函数作为参数,相当灵活。
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))
函数作为参数
var add = function(x) {
return function(y) {
return x + y;
}
}
console.log(add(1)(1)); //output 2
var add1 = add(1);
// try to compare this! add1, add1() and add1(1)
console.log(add1(1)); //output 2
var add10 = add(10);
console.log(add10(1)); //output 11
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。