完善中。。。
一、简单了解apply和call
- call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。
- call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。call其实是apply的一种语法糖。
- 格式:
apply(context,[arguments]),call(context,param1,param2,...)。
二、什么是函数柯里化?
柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
在这里举个例子,有一个add()函数,它是用来处理我们传给它的参数(param1,params2,…)相加求和的一个函数。
// 普通的add函数 function add(x, y) { return x + y } // Currying后 function curryingAdd(x) { return function (y) { return x + y } } add(1, 2) // 3 curryingAdd(1)(2) // 3
实际上就是把add函数的x,y两个参数变成了先用一个函数接收x然后返回一个函数去处理y参数。现在思路应该就比较清晰了,就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
三、解决什么问题?
让函数的职责单一
柯里化–逻辑的复用
function sum(m,n){ return m+n } //假如在程序中,我们经常需要把5和另外一个数字进行相加 console.log(sum(5,10)) console.log(sum(5,14)) console.log(sum(5,156)) console.log(sum(5,10333)) //这样写每次都要写这个5 //这个时候就可以这样做 function makeAdder(count){ count=count*count return function(num){ return count+num } } //var result=makeAdder(5)(10) //从闭包角度说是对count的复用 var adder5=makeAdder(5) adder5(10) adder5(14)
浙公网安备 33010602011771号