热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript编程技巧:深入理解高阶函数的应用与优化

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Javascript中的高阶函数相关的知识,希望对你有一定的参考价值。 之前写的《Javascript学习手册》,客户跟我说有些内容不适合初学者,让我

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Javascript中的高阶函数相关的知识,希望对你有一定的参考价值。


之前写的《Javascript学习手册》,客户跟我说有些内容不适合初学者,让我删了,感觉挺可惜的,拿到这里和大家分享。

Javascript中的一切都是对象,这句话同样适用于函数。函数对象可以作为函数的参数。

一 函数对象作为另一个函数的参数

函数可以作为另外一个函数的参数,这里的“另外一个函数”可以返回具体的值,也可以返回一个函数。第二种情况就是函数的函数,称为高阶函数。在介绍这两种情况之前,先了解一下 call() 和 apply() 方法:

call()  的使用方式为 被调用的函数.call(调用者,参数1,参数2....),功能为:调用者调用被调用的函数,并传入参数列表。

apply() 的使用方式为 被调用的函数.apply(调用者,参数组成的数组),功能为:调用者调用被调用的函数,并传入参数数组。

call() 和 apply() 里面如果传入的第一个参数是 this ,表示的是函数的调用者。


1 var store = {name:"myStore", id:5622};
2 function getSalesVolume(a, b) {
3 return a + b;
4 }
5 //store后面有两个参数
6 getSalesVolume.call(store, 40000, 50000);//返回90000
7 //store后面是一个参数数组,长度为2
8 getSalesVolume.apply(store, [40000, 50000]);//返回90000

二 返回值

一个函数作为另外一个函数的参数,并最终返回一个值。


1 //求最大值
2 function getMax(a, b) {
3 return a > b ? a : b;
4 }
5 //求最小值
6 function getMin(a, b) {
7 return a a : b;
8 }
9 //下面这个函数以函数作为参数,并最终返回一个值
10 function getM(func, num1, num2) {
11 return func(num1, num2);
12 }
13 getM(getMax, 1, 2);//返回2
14 getM(getMin, 1, 2);//返回1

 getM() 的第一个参数是函数的名字,但是不能用双引号包含在内。

三 高阶函数

高阶函数的输入是函数,输出也是函数。即一个函数调用另外一个函数,然后返回一个新的函数。比如通过调用求两个数的最大值的函数,实现求n个数的最大值的函数,就可以用到高阶函数来实现:


1 //求最大值
2 function twoMax(a, b) {
3 return a > b ? a : b;
4 }
5 function getMax(func) {
6 return function() { //返回一个匿名函数
7 var aLength = arguments.length;
8 var result = 0;
9 for (var i = 0;i ) {
10 result = func.call(this, result, arguments[i]);
11 }
12 return result;
13 };
14 }
15 var multiMax = getMax(twoMax);
16 console.log(multiMax(1, 2, 3, 4));//输出4

上面的 getMax() 函数在传入实参 twoMax() 函数后,会返回一个新的函数 multiMax() ,用来求多个数的最大值。getMax() 每次求两个数的最大值,然后再将这个最大值与第三个数比较,求最大值,这样一直进行下去,就可以求得多个数的最大值。

 


推荐阅读
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
author-avatar
叶小丹丶丶01_520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有