高阶函数(1) 2022-06-07 12:10 118阅读 0赞 ## 高阶函数 ## 高阶函数至少满足以下条件: * 函数可以作为参数被传递 * 函数可以作为返回值输出 JavaScript中高阶函数类型 1.回调函数 var appDiv = function (callback) { if(typeof callback === 'function'){ callback(); } } appDiv(function () { console.log('我是回调函数') }) 2.函数作为返回值输出 单例模式 var getSingle = function (fn) { var ret; return function () { return ret || (ret = fn.apply( this,arguments ) ) } } 3.高阶函数实现AOP AOP(面向对象)的主要作用是把一些跟核心业务逻辑无关的功能抽离出来,在通过“动态植入”的方式掺入业务逻辑快中 Function.prototype.before = function (beforefn){ var __self = this; return function(){ beforefn.apply(this,arguments); return __self.apply(this,arguments); } } Function.prototype.after = function (afterfn){ var __self = this; return function(){ var ret = __self.apply(this,arguments); afterfn.apply(this,arguments); return ret; } } var func = function(){ console.log(2) } func = func.before(function(){ console.log(1) }).after(function(){ console.log(3) }) func(); //1,2,3 3.1函数柯里化(curring) curring又称部分求值,一个currying函数首先会接受一些参数,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数真正需要求值得时候,之前传入的所有参数都会被一次性用于求值。 var curring = function(fn){ var args = [] return function(){ if(arguments.length === 0){ return fn.apply(this,args) }else{ [].push.apply(args,arguments); return arguments.callee // 返回正被执行的 Function 对象 } } } var cost = (function(){ var money = 0; return function(){ for(var i = 0,l=arguments.length;i<l;i++){ money +=arguments[i]; } return money } })() var cost = curring(cost) cost(100); cost(200); cost(300); alert(cost()) 当我们传入参数时,并不马上执行,而是把参数保存起来,等到我们执行不带参数的cost时才真正求值运算 3.2 uncurring 通过uncurring化的方式,Array.prototype.shift.call变成了一个通用的shift函数。 Function.prototype.uncurring = function(){ var self = this;//self是Array.prototype.push return function(){ return Function.prototype.call.apply(self,arguments) } } //通用 Function.prototype.uncurring = function(){ var self = this; return function(){ var obj = Array.prototype.shift.call(arguments) //argumengs对象的第一个元素'lenght'被截取 return self.apply(obj,arguments) } } for(var i=0,fn,ary = ['push','shift','forEach'];fn = ary[i++];){ Array[fn] = Array.prototype[fn].uncurring(); } var obj = { "length":3, "0":1, "1":2, "2":3 } Array.push(obj,4); console.log(obj.length)//4 var first = Array.shift(obj); console.log(first)//1 console.log(obj)//{0: 2, 1: 3, 2: 4, length: 3}
相关 高阶函数 百度百科的解释: 在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数: ①接受一个或多个函数作为输入; ②输出一个函数 第一个条件就是:函数作为参数传入 灰太狼/ 2021年08月19日 15:42/ 0 赞/ 340 阅读
相关 了解高阶函数 JavaScript的函数其实都指向某个变量,既然变量可以指向函数, 函数的参数能接受变量,那么一个函数就可以接收另一个函数作为参数 这种函数就称为高阶 ╰+哭是因爲堅強的太久メ/ 2021年10月24日 06:00/ 0 赞/ 246 阅读
相关 scala高阶函数 1.作为值的函数 import scala.math._ object Test extends App { //scala中函数是头等 r囧r小猫/ 2021年12月13日 04:14/ 0 赞/ 213 阅读
相关 高阶函数(一) 1 什么是高阶函数 1.1 高阶函数的基本概念 高阶函数其实看着挺吓人,不过就是把函数作为参数或者返回值的一类函数而已。其实这样的函数我们都见过很多了,来看个例子: 刺骨的言语ヽ痛彻心扉/ 2022年04月25日 07:24/ 0 赞/ 161 阅读
相关 高阶函数(二) 上周我已经给大家推送了一篇关于高阶函数的文章,这一期,我们继续探讨一些相关的有意思的话题。 1 复合函数 大家一定见过下面的数学题吧: ![0?wx\_fmt=png 旧城等待,/ 2022年04月25日 07:24/ 0 赞/ 134 阅读
相关 高阶函数(1) 高阶函数 高阶函数至少满足以下条件: 函数可以作为参数被传递 函数可以作为返回值输出 JavaScript中高阶函数类型 1.回调函数 淩亂°似流年/ 2022年06月07日 12:10/ 0 赞/ 119 阅读
相关 高阶函数(2) 函数节流 函数的触发不是由用户控制的,有可能频繁触发,就会造成性能问题,如:window.onresize事件,mousemove,上传进度。节流的代码实现由很多 红太狼/ 2022年06月07日 12:28/ 0 赞/ 101 阅读
相关 Scala 高阶函数 Scala 高阶函数 Scala混合了面向对象和函数式的特性。在函数式编程语言中,函数是“头等公民”,可以像任何其他数据类型一样被传递和操作。每当你想要给算法传入明细动作 痛定思痛。/ 2022年06月08日 00:20/ 0 赞/ 153 阅读
相关 高阶函数(一) > 原文链接:[https://github.com/enbandari/Kotlin-Tutorials][https_github.com_enbandari_Kotlin 电玩女神/ 2022年06月08日 10:56/ 0 赞/ 135 阅读
相关 js高阶函数 > 高阶函数? 两种应用方式可称之为高阶函数 1. 函数内部返回一个函数,外层函数可以叫做高阶函数 function A() { 末蓝、/ 2022年08月28日 14:49/ 0 赞/ 69 阅读
还没有评论,来说两句吧...