细说JS系列(十五)—高阶函数和函数柯里化

91 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

铃铛说点题外话

一句话前情回顾:箭头函数this指向外层作用域的this,箭头函数不能实例化,箭头函数没有arguments用扩展运算符代替

一句话介绍今天:高阶函数和函数柯里化

今天就要把箭头函数打下来

铃铛说正文

image.png

纯函数

我们可以将具有以下的条件的我们可以称作为纯函数

  1. 有相同的输入,就一定会有相同的输出
  2. 输出和输入的值以外的其他信息和状态无关,也和设备的摆布输出无关。
  3. 也不能有语义上的副作用,比如触发事件、使输出设备输出、或者更改输出值之外的内容等。

总结来说就是两点:

  1. 确定的输入,一定有确定的输出
  2. 函数在执行过程中,一定不能有副作用

举个例子

function sum(num1, num2) {
    return num1 + num2
}

我们输入的一样的值,一定会得到一样的结果。sum这个函数我们就可以称为纯函数

var name = "abc"
function changeName(){
 name = cba"
}

changeName这个函数里面,会对全局的变量name进行改变,所以changeName不能被称为一个纯函数

函数柯里化

柯里化是指:

  1. 是把接收多个参数的函数,变成接收一个单一的参数的函数,并且返回接收余下参数,而且返回的结果是新函数的
  2. 柯里化声称如果你固定某些参数,你将得到接受余下参数的一个函数
function foo(a, b, c, d) {
  return a + b + c + d
}

console.log(foo(10,20,30,40));
  • 柯里化后
function fn(a) {
  return function(b) {
    return function(c) {
      return function(d) {
        return a + b + c + d
      }
    }
  }
}
console.log(fn(10)(20)(30)(40));
  • 简化柯里化
var sum = x => y => z =>{
  return x + y + z
}
console.log(sum(10)(20)(30));

跟铃铛说再见

学习的最后一步:放松

今日冷笑话:从前有个人钓鱼,钓到了只鱿鱼。鱿鱼求他:你放了我吧,别把我烤来吃啊。那个人说:好的,那么我来拷问你几个问题吧。鱿鱼很开心说:你考吧你考吧!然后这人就把鱿鱼给烤了..

放松结束,猜猜明天会说讲些什么吧