美文网首页
什么是高阶函数和高阶函数的应用

什么是高阶函数和高阶函数的应用

作者: 小枫学幽默 | 来源:发表于2020-06-28 21:41 被阅读0次

什么是高阶函数

高阶函数:是指一个函数他的参数是函数 / 返回值是函数

let is = false;
function isType(param, type) {
  return Object.prototype.toString.call(param).includes(type);
}
console.log(isType(is,"Boolean"));
console.log(isType(is,"String"));

//封装一个高阶函数
function isType(type) {
  return function (param) {
    return Object.prototype.toString.call(param).includes(type);
  };
}

let types = ["String","Number", "Boolean","Object","Array","Null","Undefined"];
let utils = {};
types.forEach(type=>{
  utils["is" + type] = isType(type);
})
console.log(utils);
console.log(utils.isString("1"));
console.log(utils.isNumber(1));
console.log(utils.isNull(null));
console.log(utils.isNull(undefined));
console.log(utils.isUndefined(undefined));
console.log(utils.isArray([]));

可以用来做什么?

1、预置参数 (如 bind)

bind函数也是返回一个自定义了this的新函数

2、解决异步问题 (异步并发问题解决 计数就好),Promise.all 的原理

let fs = require("fs");

let contentArr = [];

function callback(content) {
  contentArr.push(content);
  if(contentArr.length == 2){
    console.log(contentArr.join("=>"));    
  }
}

fs.readFile("./hello.txt","utf8",function (err,content) {
  callback(content);  
})
fs.readFile("./world.txt","utf8",function (err,content) {
  callback(content);  
})

// world =>hello

// 保证顺序
let fs = require("fs");

let contentArr = [];
let count = 0;

function callback(content,index) {
  contentArr[index] = content;
  if (++count == 2) {
    console.log(contentArr.join("=>"));
  }
}

fs.readFile("./hello.txt","utf8",function (err,content) {
  callback(content,0);  
})
fs.readFile("./world.txt","utf8",function (err,content) {
  callback(content,1);  
})


//高阶函数改写
let fs = require("fs");
/**
 * 高阶函数 当函数执行 times N 次后才执行回调
*/
function after(times,callback) {
  let arr = [];  
  return function (content) {
    arr.push(content);
    if(--times === 0){
      callback(arr);
    }
  };
}

//当三个异步读取文件的操作都完成之后才执行回调 三个是串行的
let afterInstence = after(3,function (params) {
  console.log(params);  
})

fs.readFile("./hello.txt","utf8",function (err,content) {
  afterInstence(content);  
})
fs.readFile("./wonderful.txt", "utf8", function (err, content) {
  afterInstence(content);
});
fs.readFile("./world.txt","utf8",function (err,content) {
  afterInstence(content);  
})

3、AOP 面向切片编程 (扩展原有方法,不影响原有功能,加上自己自定义的东西 / 或重写原方法)【待研究】

//握手之前先擦擦手

function sharkHands(what) {
  console.log(what);  
}

Function.prototype.before = function (fn) {
  let that = this;
  return function () {
    fn();
    that(...arguments);
  }
}

let sharkHandsFn = sharkHands.before(function () {
  console.log("擦了擦手");
});

sharkHandsFn("=》握手");

相关文章

  • Python | 高阶函数基本应用及Decorator装饰器

    一、高阶函数 理解什么是高阶函数?以及高阶函数的基本应用方法 ▲ 高阶函数 在了解什么是高阶函数之前,我们来看几个...

  • JS函数柯里化

    在正式聊函数柯里化之前,我这里给大家补充下高阶函数的概念和应用: 1.1、什么是高阶函数?高阶函数英文叫 High...

  • Python高阶函数

    本文要点 1.什么是高阶函数 2.python中有哪些常用的高阶函数 什么是高阶函数? 在了解什么是高阶函数之前,...

  • Kotlin 高阶函数

    什么是高阶函数 将函数作为参数或者返回值的,称高阶函数。 定义高阶函数 action是一个高阶函数,(Int) -...

  • 什么是高阶函数和高阶函数的应用

    什么是高阶函数 高阶函数:是指一个函数他的参数是函数 / 返回值是函数 可以用来做什么? 1、预置参数 (如 bi...

  • [JS函数] (Array)の高阶函数

    JS函数 高阶函数 高阶函数英文叫Higher-order function。那么什么是高阶函数? JavaScr...

  • JavaScript之高阶函数

    高阶函数英文叫Higher-order function。那么什么是高阶函数?在数学和计算机科学中,高阶函数是至少...

  • Day10. 高阶组件

    1. 认识高阶函数 什么是高阶组件呢?认识高阶函数.png 高阶函数: 接收一个或多个函数作为输入, 输出一个函数...

  • Python常用高阶函数map、sorted、filter及生成

    先说什么是高阶函数,高阶函数是指可以接受函数作为参数、或者可以把函数作为结果返回的函数,这种函数就是高阶函数。使用...

  • react 高阶组件

    高阶函数对大家可能有点陌生,我们把高阶和函数分开来看,先看什么是高阶然后再看什么是组件。 高阶函数 可以有效降低复...

网友评论

      本文标题:什么是高阶函数和高阶函数的应用

      本文链接:https://www.haomeiwen.com/subject/uqdgfktx.html