Javascript是您的高阶函数(高级应用程序)。
2023-11-27 11:37:15
在通常的编程语言中,一个函数的参数只能是一个基本类型或对象引用,并返回值只是一个基本数据类型或对象引用。但在Javascript,作为一个一流的公民可以作为参数或返回一个返回值传递。所谓的高阶功能是使用一个函数作为参数,或使用一个函数作为一个函数,返回一个值。这两种情况有很多在实际开发中的应用情况。本文是我在工作和学习中遇到的几种应用场景的总结。 回调函数 代码复用是测量应用的一个重要标准。代码的可重用性,可以通过回调函数将改变业务逻辑有效改善。例如,foreach方法是添加到ES5数组,遍历数组的每个元素,和相同的函数调用。 数组{ }; array.foreach =功能(ARR,FN){ 对于(var i = 0,len = arr.length;我< len;i++){ FN(ARR {我},我,ARR); } } 业务的重点集中在回调函数的回调函数中,而不必每次重复遍历代码。 部分功能 作为返回值的函数的一个典型应用是一个局部函数,部分函数指的是使用一个函数创建一个调用另一部分的函数,这个参数或变量已经预先设定。偏函数最典型的例子是类型判断。 所有的Javascript对象有三个属性:原型属性,类属性、可扩展性。(未知的学生回到犀牛,哦,页:138)属性是一个字符串,Javascript不直接提供,但我们可以用object.prototype.tostring间接得到它。函数始终返回以下形式: {对象类} 所以我们可以写一个系列的类型的功能。 代码如下: isstring =功能(obj){ 返回object.prototype.tostring.call(obj)={对象的字符串}; } isnumber =功能(obj){ 返回object.prototype.tostring.call(obj)={对象编号}; } ISArray =功能(obj){ 返回object.prototype.tostring.call(obj)={对象数组}; } 大多数代码是重复的,高阶函数是华丽的。 类型=功能(型){ 返回功能(obj){ 返回object.prototype.tostring.call(obj)= {对象+类型+ }; } } isstring =类型('String'); isnumber =类型(数的); ISArray =类型('array); 因此,通过指定一些参数来返回一个新的自定义函数,它是一个局部函数。 加脂(柯丽华) 阿谀奉承也叫做局部评价,腐熟功能先接受一些参数。接受这些参数后,函数不会立即进行评估,而是继续返回到另一个函数。刚刚传递的参数保存在函数形成的闭包中。当一个函数确实需要求值时,所有的前入参数都将用于一次求值。 VaR钻营=功能(Fn){ var args = { }; 返回函数(){ 如果(arguments.length = 0){ 返回fn.applay(这,args); {人} args = args.concat(参数); 返回arguments.callee; } } } 假设我们用一个月的时间来计算一个月的成本: VaR钻营=功能(Fn){ 调试器; var args = { }; 返回函数(){ 如果(arguments.length = 0){ 返回fn.apply(这,args); {人} Array.prototype.push.apply(参数,参数); 返回arguments.callee; } } } 成本=函数(){ var总和= 0; 对于(var i = 0,len = arguments.length;我< len;i++){ 总和=参数{ }; } 收起回复; } 可变成本=腐熟(成本); 成本(100); 成本(200); 警报(费用) 事件节流 在某些情况下,某些事件可能引发反复,但事件处理函数不需要执行一次。例如,在window.resize事件复杂的逻辑,如果用户频繁改变浏览器的大小,复杂的计算会对性能产生严重的影响;有时这些逻辑运算不需要每个rezise触发器,只有数量有限的时间可以计算的。在这一点上我们需要忽略一些事件请求根据时间段。请看下面的节流作用: 功能节流阀(FN,间隔){ var = false; 返回函数(){ 如果(做){ 返回; } 做=真的; Fn.apply(这个参数); setTimeout(){()函数( 做=假; },区间); } } window.onresize =节流(函数(){() console.log('execute); },500); 通过控制函数的执行时间,对函数的数量和功能需求之间的完美平衡是可以实现的。另一件事是MouseMove。如果我们将事件绑定到一个DOM元素,事件将触发多次当鼠标移动在改性元素。 事件结束 对于一些可以频繁触发的事件,有时我们希望在事件结束后进行一系列操作,此时我们可以使用高阶函数进行以下处理: 功能消抖(FN,间隔){ var定时器= null; 函数延迟(){ var目标=; var args =参数; setTimeout()函数返回((){ fn.apply(目标,args); },区间); } 返回函数(){ 如果(定时器){ ClearTimeout(定时器); } 定时器= delay.apply(这个参数); } }; window.onresize =节流(函数(){() console.log('resize结束); },500); 如果事件在这个过程中触发,则最后一个事件句柄被清除,执行时间被重新绑定。 参考材料uff1a 节点 Javascript设计模式和开发实践tag:应用程序 高阶函数 您的 高级 电脑软件
相关内容