1、前言
在JavaScript中,函数实际上也是一个数据,也就是说函数也可以赋值给一个变量。本篇文章就来介绍一些JavaScript中的高阶函数的用法。
2、递归
所谓的递归,就是指函数自己调用自己;用一个故事来说呢就是:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'” 。 从某种意义上说,递归近似于循环。两者都重复执行相同的代码,并且两者都需要一个终止条件,以避免无限循环或者无限递归。 递归所需要的必要条件如下: 在JavaScript中想要递归调用存在两种方式 - 通过使用函数名实现
- 通过使用arguments.callee属性实现。
如下代码展示了简单的递归: var v = 1 // 出口条件function fun() { console.log('第' + v + '次调用函数') v++ if (v <= 3) { fun() }}fun() 执行结果如下 第1次调用函数 第2次调用函数 第3次调用函数
3、回调函数
然函数与任何可以被赋值给变量的数据是相同的,那么它当然可以像其他数据那样被定义、删除、拷贝,以及当成参数传递给其他函数。 当一个函数作为参数传递给另一个函数时,作为参数的函数被称之为回调函数。作为使用回调函数的函数称为目标函数(外层函数) 示例代码如下所示: // 定义一个函数,这个函数有两个函数类型的参数,然后分别执行那两个函数,并返回它们的和。function sum(a, b) { // 目标函数 return a() + b()}function one() { // 回调函数 return 1}function two() { // 回调函数 return 2}console.log(sum(one, two)) // 3 代码执行流程如下: 当执行sum 函数时,传入两个实参,在sum 函数中,会将两个实参作为函数执行,并将返回值计算并返回。
3.1匿名回调函数
所谓匿名回调函数,就是目标函数中的参数是没有名称的函数,将上一段代码修改为使用匿名回调函数 // 定义一个函数,这个函数有两个函数类型的参数,然后分别执行那两个函数,并返回它们的和。function sum(a, b) { // 目标函数 return a() + b()}console.log( sum( function () { // 匿名回调函数 return 1 }, function () { // 匿名回调函数 return 2 }, ),) // 3
3.2带参数的回调函数
回调函数是可以增加参数的,示例代码如下: function multiplyByTwo(list, callback) { list.forEach(function (v, i) { callback(v * 2, i) })}var list = [1, 2, 3]multiplyByTwo(list, function (v, i) { list[i] = v})console.log(list) // [ 2, 4, 6 ]
3.3回调函数的优缺点
|