高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出。
函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。 最典型的就是作为回调函数。
同理函数也可以作为返回值传递回来
一、回调函数
回调函数:指的就是一个函数A作为参数传递给一个函数B,然后在B的函数体内调用函数A。此时,称函数A为回调函数。
例:
function cal(num1, num2, fn) {
return fn(num1, num2);
}
console.log(cal(45, 55, function (a, b) {
return a + b;
}));
//function(a,b)作为参数作为参数传递给一个cal() ,然后在cal()的函数体内调用function(a,b)。
//此时,称function(a,b)为回调函数。
//调用cal()函数,首先将num1 = 45,num2 = 55,function(a,b)的返回值是a+b,,
//cal的返回值是fn(44,45),即就是将fn的num1和num2调用到function(a,b)的a和b中,最后返回a+b=100
console.log(cal(10, 20, function (a, b) {
return a * b;
}));
//打印200
二、递归函数
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函数内部自己调用自己, 这个函数就是递归函数。
递归函数的作用和循环效果一样。
由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件 return。
<script>
var num = 1;
function fn() {
console.log('我要打印6句话');
if (num == 6) {
return; // 递归里面必须加退出条件
}
num++;
fn();
}
fn();
</script>
根据用户的输入计算指定数据的阶乘:
function factorial(n) {
// 定义回调函数
if (n == 1) {
return 1; // 递归出
}
return n * factorial(n - 1);
}
var n = prompt(