likes
comments
collection
share

一些简单的定义1(回调函数、高阶函数、柯里化…)

作者站长头像
站长
· 阅读数 45

函数式编程

在大多数简单的术语中,函数式是一种编程形式,你可以将函数作为参数传递给其他函数,并将它们作为值返回。 在函数式编程中,我们以函数的形式思考和编程。

JavaScript,Haskell,Clojure,Scala 和 Erlang 是部分实现了函数式编程的语言。

回调函数:

回调函数是一个函数,将会在一个函数调用完后立刻调用,并且回调函数会作为一个参数传给另一个JavaScript函数,这个回调函数会在传给的函数内部执行。

回调函数既有同步函数,也有异步函数,但是我们多用来处理异步事件

this指向问题: 如果遇到计时器通常指向windows,因为this指向调用它的对象

回调地狱:当多个异步函数一个接一个地执行时,会产生回调地狱。

例:

function a(callback)
{   
    alert("我是parent函数a!");
    alert("调用回调函数");
    callback();
}
function b(){
alert("我是回调函数b");
  
}
function c(){
alert("我是回调函数c");
  
}

function test()
{
    a(b);
   a(c);
}

工厂函数:

  1. 它是一个函数。
  2. 它用来创建对象。
  3. 它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性) 例:
function person(firstName, lastName, age) {
  const person = {};
  person.firstName = firstName;
  person.lastName = lastName;
  person.age = age;
  return person;
}

高阶函数(juejin.cn/post/684490…

高阶函数是对其他函数进行操作的函数,操作可以是将它们作为参数,或者是返回它们。 简单来说,高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。

例如,Array.prototype.map,Array.prototype.filter 和 Array.prototype.reduce 是语言中内置的一些高阶函数。

柯里化:太难了(juejin.cn/post/684490…

定义:

数学和计算机中的柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

JavaScript中的柯里化是通过函数继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式; 将一个基础函数根据要传过来的参数分类,由基础函数为底在封装一层函数,以应对不同分类的参数(个人理解,建议去看原文)

例:不进行柯里化,当只进行少量的校验时可能比较轻松,但是当大量的复用时,柯里化就比较简单啊

// 柯里化之前
function checkByRegExp(regExp,string) {
    return regExp.test(string);  
}

checkByRegExp(/^1\d{10}$/, '18642838455'); // 校验电话号码
checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'test@163.com'); // 校验邮箱

//进行柯里化
let _check = curry(checkByRegExp);
//生成工具函数,验证电话号码
let checkCellPhone = _check(/^1\d{10}$/);
//生成工具函数,验证邮箱
let checkEmail = _check(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/);

checkCellPhone('18642838455'); // 校验电话号码

checkEmail('test@163.com'); // 校验邮箱

疑惑:但是看到这里我有点疑惑,在函数把基础函数当参数时,还能给当参数的基础函数传参数呢?而且不会把基础函数的参数位置给挤掉?

例: 多个参数时

//普通函数
function fn(a,b,c,d,e) {
  console.log(a,b,c,d,e)
}
//生成的柯里化函数
let _fn = curry(fn);

_fn(1,2,3,4,5);     // print: 1,2,3,4,5
_fn(1)(2)(3,4,5);   // print: 1,2,3,4,5
_fn(1,2)(3,4)(5);   // print: 1,2,3,4,5
_fn(1)(2)(3)(4)(5); // print: 1,2,3,4,5
转载自:https://juejin.cn/post/7036622747752988685
评论
请登录