Time will tell.

一、JavaScript中的函数

在 JavaScript 中,函数也是一种 data,一种数据,只不过这种数据比较特殊,它里面存的是代码,而且这种data可以被调用执行。

自然,因为函数也是数据,所以就可以赋值给变量。所以我们在 JavaScript 中经常看到这样的程序:

var f = function() {return 1;
}

我们将一个函数表达式赋值给了变量f,所以我们直接通过变量f来调用这个函数,只需要在f后面加上()就行了。

JavaScript 中函数的调用特征就是后面跟一对括号,里面可以有参数。


js_function.PNG

如图中的执行代码,要调用某个函数,只需要在它的名字后面加一对括号即可,而且我们可以像变量一样使用函数,也就是说,我们可以将它拷贝给不同的变量。例如,我们将f拷贝给f2,那么f2也是一个函数变量,并且可以调用执行。JavaScript 中的函数有以下特点:

  • 函数也是一种data,一种数据
  • 函数这种特殊的数据所包含的是代码
  • 它们可以被调用执行

二、匿名函数

如前文所提的:

var f = function() {return 1;
}

这样的函数我们称之为匿名函数。可以和非匿名函数对比一下。

function f() {return 1;
}

匿名函数有种特殊的用法就是,跟其他数据data一样作为参数传递给其他函数,因为我们已经知道函数在javascript中和其他数据data是一样的额,所以将函数作为参数就不难理解了。这样使用函数就是回调函数。

三、回调函数

既然函数与任何可以被赋值给变量的数据是相同的,那么它们当然可以像其他数据那样来定义,删除,拷贝,以及当成参数传递给其他函数。

例如下面这个例子:

function add(a, b)
{return a() + b();
}function one() {return 1;
}function two() {return 2;
}add(one,two);

这就是一个简单的回调函数的实例。add中的参数是两个函数,我们将one,two两个函数传进去,在add中执行one和two两个函数,这就是回调函数。更简洁的,我们还可以直接用匿名函数来简化上述代码。

function add(a, b)return a() + b();
}add(function () {return 1;},function () {return 2;}
)

上述代码在控制台中运行的结果如下:

四、回调函数的使用

知道了什么是回调函数,我们来看一下回调函数的使用。回调函数有什么优势呢?也就是为什么要使用回调函数。

  • 它可以让我们在不做命名的情况下传递函数(这意味可以减少变量名的使用)
  • 我们可以讲一个函数调用操作委托给另一个函数(这意味着可以节省一些代码编写工作)
  • 有助于提升性能

五、回调函数实例

下面我们通过一个例子来看看回调函数使用和他的优势。

我们定义两个函数,一个是multiplyByTwo();这个函数一个循环将它接受的三个参数分别乘2,并以数组的形式返回结果;第二个函数addOne()只接受一个值,然后将它加1并返回。

function multiplyByTwo(a, b, c, callback) {var ar = [];for (var i = 0; i < 3; i++) {ar[i] = arguments[i] * 2;}return ar;
}
function addOne(a) {return a + 1;
}

现在假设我们有三个元素(1,2,3)我们现在摇奖它们先乘2,再分别加一,不考虑回调函数的话,那么我们可以这么做。

var myarr = [
];
myarr = multiplyByTwo(1, 2, 3);
//然后再遍历数组,给每个元素加一
for (var i = 0; i < 3; i++) {myarr[i] = addOne(myarr[i]);
}

这段代码,显然可以工作,但还有一定的改善空间,特别是这里使用了两个循环,如果数据量一大,开销一定很大。因此,我们可以使用回调函数,将它们合二为一,这就要对multiplyByTwo函数做一些小改动,使其接受一个回调函数,并在每次迭代操作中调用它。

function multiplyByTwo(a, b, c, callback) {var ar = [];for (var i = 0; i < 3; i++) {ar[i] = callback(arguments[i] * 2);}return ar;
}

这样,我们只需要调用一次函数就可以了。

var myarr = mutiplyByTwo(1, 2, 3, addOne);
myarr

六、最后

函数在JavaScript中和数据一样,可以赋值,删除,拷贝,自然也可以作为函数的参数,这样就引出了回调函数的概念。我们通过简单的例子,介绍了回调函数,然后说明了回调函数使用的优势,可以简化代码,提高效率,且代码易于修改和维护。


今天就分享到这里了,如果你对Python自动化软件测试、面试题、实例练习题感兴趣的话可以加入我们175317069一起学习喔。群里会有各项学习资源发放,也有行业深潜多年的测试人技术分析讲解。

最后祝愿你能成为一名优秀的软件测试工程师!

欢迎【评论】、【点赞】、【关注】~

Time will tell.(时间会证明一切)

浅聊JavaScript中的回调函数相关推荐

  1. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  2. 关于javascript中的回调函数

    关于javascript中的回调函数 原文地址:http://blog.csdn.net/sicluoyi/article/details/1737969 考虑一个这样的例子: 假如某个项目的底层和高 ...

  3. 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...

  4. 理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...

  5. 【JavaScript】理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...

  6. 什么是JavaScript中的回调函数?

    This article gives a brief introduction to the concept and usage of callback functions in the JavaSc ...

  7. JavaScript中的回调函数(callback)

    前言 callback,大家都知道是回调函数的意思.如果让你举些callback的例子,我相信你可以举出一堆.但callback的概念你知道吗?你自己在实际应用中能不能合理利用回调实现功能? 我们在平 ...

  8. bootstraptable 加载完成回调函数_牛皮了!头一次见有大佬把「JavaScript中的回调函数」详解得如此清晰明了...

    前言 callback,大家都知道是回调函数的意思.但是你对这个概念应该是模模糊糊.比如Ajax,你只知道去调用返回函数,如果对callback没有理解清楚,估计你在学习Node.js后会崩溃,因为c ...

  9. javaScript中的回调函数

    ​ <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8&qu ...

最新文章

  1. 如何给Docker镜像瘦身?
  2. 互动整合营销_今天,我们谈谈展会的整合营销!
  3. Central Authentication Service
  4. 第二周作业 wordcount
  5. Charles抓包-解决显示乱码问题
  6. Civil3D二次开发Cookbook
  7. ArangoDB查询语言(AQL) 基本语法用法
  8. Excel用数据透视表制作日历
  9. CCF 202109-2 非零段划分(动态规划法,过了70%)
  10. 计算机控制面板属性在哪里打开,win7如何打开系统属性面板|win7打开系统属性面板的方法...
  11. linux vim无法退格,Cygwin下安装vim后,vim中退格键无法正常使用的解决方法
  12. c语言分桃分题设计思路,C语言实现的猴子分桃问题算法解决方案
  13. HTML/设置网页背景图片+背景透明度设置
  14. 统计学习(一):最大似然估计
  15. pytorch深度学习基础(九)——深入浅析卷积核
  16. 将低版本CAD图纸转换成2018版本应该如何操作?
  17. (十)SSL协议(待修)
  18. 【easyExcel处理excel】
  19. 观沈向洋博士论文阅读技巧有感
  20. 达梦数据库课程干货分享LIKE、REGEXP_LIKE、INSTR的正确打开方式

热门文章

  1. PY快速备注或者注释快捷键(单行或多行)
  2. 用DIV+CSS技术设计的红酒主题网站(web前端网页制作课作业)
  3. VSCode编译调试复杂C/C++项目
  4. 使用mp3tagiconv解决MP3乱码问题
  5. 变种 背包问题_01背包及其变种(物品无限背包、恰好装满背包)
  6. matlab中svm算法实现,svm算法matlab实现
  7. c语言到字符串的题库,C语言 - 考试题库测试
  8. resultMap使用方法
  9. 解决启动报错Consider defining a bean of type ‘xxx‘ in your configuration.
  10. 手机计算机用英语怎么说,什么软件可以自动将手机上显示的英语翻译成汉字