mc-congxueda

导航

 

完善中。。。

一、简单了解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)

 

posted on 2022-09-23 16:21  MC~大叔  阅读(44)  评论(0)    收藏  举报