回调函数
会在外部函数执行完某些任务后被调用的函数
回调函数的结构
- 外部函数会接收一个回调函数作为参数
- 当某些操作完成时,外部函数就会“回调”并执行这个回调函数
// 外部函数
function greet(name, callback) {
console.log("Hello, " + name);
callback(); // 在适当时机调用回调函数
}
// 回调函数
function sayGoodbye() {
console.log("Goodbye!");
}
// 调用外部函数,传递回调函数
greet("Alice", sayGoodbye);
输出:
Hello, Alice Goodbye!
回调函数的作用
回调函数通常用来:
- 处理异步操作:例如,服务器请求完成后的回调、定时器结束后的回调等。
- 数组操作:如
map、filter、reduce等方法都使用回调函数来操作数组中的元素。 - 事件监听:监听用户的点击、键盘输入等事件时,通常会传入回调函数处理这些事件。
回调函数在数组方法中的应用
回调函数在常用的数组方法中是非常常见的,它通常作为参数传递给这些方法,用于对数组元素进行处理。 例如:filter()方法中的回调
const numbers = [1, 2, 3, 4, 5];
// 使用回调函数过滤出大于 2 的数字
const filteredNumbers = numbers.filter((number) => number > 2);
console.log(filteredNumbers); // [3, 4, 5]
这里,filter 方法接收一个回调函数 (number) => number > 2,这个回调函数会在数组的每个元素上执行。对于每个元素,如果回调函数返回 true,该元素就会被保留在新的数组中;如果返回 false,该元素就会被移除。
回调函数的异步操作
回调函数经常用于处理异步操作,典型的例子是网络请求、定时器等。异步操作通常不会立即完成,而是稍后再回调处理结果。
例子:异步回调函数
function fetchData(callback) {
setTimeout(() => {
const data = "This is the data!";
callback(data); // 异步操作完成后回调
}, 1000);
}
fetchData((data) => {
console.log(data); // 1秒后输出: This is the data!
});