此系列体验视频教程
点击观看:哔哩哔哩
什么是回调函数
回调函数:将一个函数作为参数传递到另外一个函数中,并在另一个函数当中调用
function fn1(f) { // 回调函数,接收的是函数
console.log('fn1');
f() // 调用接收进来的函数
}
function fn2() {
console.log('fn2');
}
fn1(fn2)
回调函数与作用域
function fn1(f) {
var a = 1
f()
}
var a = 2
function fn2() { // 函数的作用域跟函数的定义相关
console.log(a);
}
fn1(fn2) // 2
回调函数的传参1
function fn1(f, b) { // 将回调函数f和回调函数f的参数都放在外部的函数上进行传递
f(b)
}
function fn2(a) {
console.log(a);
}
fn1(fn2, 1)
fn1(function (a) {
alert(a)
}, 2)
回调函数的传参2
function fn1(f) {
return function (b) { // 闭包
f(b) // 内部调用
}
}
function fn2(a) { // 外部定义
console.log(a);
}
function fn3(a) {
console.log('《' + a + '》');
}
fn1(fn2)(1) // 1
fn1(fn3)(2) // 《2》
练习
function fn(f) {
return function () {
console.log(arguments);
return f(arguments)
}
}
function add(args) {
var result = 0
for (var i = 0; i < args.length; i++) {
result += args[i]
}
return result
}
console.log(fn(add)(1, 2, 3, 4, 5, 6)); // 21
function mul(args) {
var result = 1
for (var i = 0; i < args.length; i++) {
result *= args[i]
}
return result
}
console.log(fn(mul)(1, 2, 3, 4, 5, 6)); // 720
递归
function fn(n) {
console.log(n);
n--
if(n > 0) fn(n)
}
fn(6)
function fn(n) {
console.log(n);
if(n > 1) fn(n - 1)
}
fn(6)
// 求一个数的阶乘
// 6 1 * 2 * 3 * 4 * 5 * 6
function fac(n) {
if (n == 1) return 1
return n * fac(n - 1)
}
console.log(fac(6));
// 斐波那契数列
// 0 1 1 2 3 5 8 13 21
function fb(n) {
if (n == 1) return 0
if (n == 2) return 1
return fb(n - 2) + fb(n - 1)
}
console.log(fb(6));