JS函数式编程01--函数式编程概念

2020-06-09  本文已影响0人  小q

函数式编程概念

函数式编程的常见特性

1. 无副作用

这里指调用函数时不会修改外部状态,一个函数调用n次后依然返回相同的结果。

2. 引用透明

一个函数只会用到传递给它的变量以及自己内部创建的变量,不会使用到其他变量。

3. 函数是一等公民

指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入给另一个函数,或者作为另一个函数的返回值。

高阶函数

什么是高阶函数

  1. 将一个或多个函数作为参数
  2. 可以把函数作为另一个函数的返回结果

我们常用的filter,map,reduce,forEach,every,some等都是高阶函数。

下面模拟一下filter,来体现函数作为参数的情况

function filter(array,fn){
  let result = []
  for(let i = 0;i<array.length;i++){
    if(!!fn(array[i])){
      result.push(array[i])
    }
  }
  return result
}

而函数作为另一个函数的返回结果,可以看下面的例子

  //对一个函数只执行一次
function once(fn){
  let done = false;
  return function () {
    if(!done){
      done = true;
      return fn.apply(this,arguments)
    }
  }
}

这个函数就是返回一个函数,你可以接收这个函数,并定义自己想实现的方法。

  const click = once(function(i){
    console.log(`第${i}次点击`)  
  })

高阶函数的意义

闭包

闭包概念

闭包本质

函数在执行的时候会放到一个执行栈上当函数执行完毕后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问外部函数的成员。

闭包作用

闭包延长了外部函数内部变量的作用范围。

//demo 求多少次方的函数
function makePow(power){
  return function(number){
    return Math.pow(number,power)
  }
}

纯函数

纯函数的概念:

纯函数的好处

函数的副作用

函数的副作用就是让一个函数不纯,即相同的输入可能会得到不同的输出。如果函数依赖于外部的状态就无法保证输出相同,就会带来副作用。

总结

这篇文章主要总结了js函数式编程的一些概念,下一篇会总结函数柯里化,函数组合。
函数式编程02

上一篇 下一篇

猜你喜欢

热点阅读