JavaScript 回调函数
提示
- 回调函数定义:在JavaScript中,回调函数是作为参数传递给另一个函数的函数,用于在第一个函数执行完成后执行。
- 异步执行示例:使用
setTimeout()
方法可以模拟需要等待执行的操作,如服务器数据获取,其中回调函数在指定时间后执行。 - 同步执行的回调:回调函数可用于确保在前一个函数执行完毕后再执行后续函数,从而实现同步执行,尤其适用于处理需要时间等待的操作(如服务器响应)。
函数是一段执行特定任务的代码块,当被调用时执行。例如,
// 函数
function greet(name) {
console.log("Hi" + " " + name);
}
greet("Peter"); // Hi Peter
在上面的程序中,一个字符串值作为参数传递给了 greet()
函数。
在JavaScript中,你也可以将一个函数作为参数传递给另一个函数。这个作为参数传递的函数称为回调函数。例如,
// 函数
function greet(name, callback) {
console.log("Hi" + " " + name);
callback();
}
// 回调函数
function callMe() {
console.log("I am callback function");
}
// 将函数作为参数传递
greet("Peter", callMe);
输出
Hi Peter
I am callback function
在上述程序中,有两个函数。在调用 greet()
函数时,传递了两个参数(一个字符串值和一个函数)。
callMe()
函数是一个回调函数。
回调函数的好处
使用回调函数的好处是,你可以等待前一个函数调用的结果,然后再执行另一个函数调用。
在这个例子中,我们将使用 setTimeout()
方法来模拟需要时间执行的程序,比如从服务器获取的数据。
示例:带有setTimeout()的程序
// 显示执行中的延迟的程序
function greet() {
console.log("Hello world");
}
function sayName(name) {
console.log("Hello" + " " + name);
}
// 调用函数
setTimeout(greet, 2000);
sayName("John");
输出
Hello John
Hello world
如您所知,setTimeout() 方法在指定时间后执行代码块。
这里,greet()
函数在 2000 毫秒(2 秒)后被调用。在此期间,sayName('John');
被执行。这就是为什么 "Hello John" 在 "Hello world" 之前被打印出来的原因。
上述代码是异步执行的(第二个函数;sayName()
并不等待第一个函数;greet()
完成)。
示例:使用回调函数
在上面的示例中,第二个函数不等待第一个函数完成。然而,如果你想在执行下一条语句之前等待前一个函数调用的结果,你可以使用回调函数。例如,
// 回调函数示例
function greet(name, myFunction) {
console.log("Hello world");
// 回调函数
// 只有在greet()执行后才执行
myFunction(name);
}
// 回调函数
function sayName(name) {
console.log("Hello" + " " + name);
}
// 在2秒后调用函数
setTimeout(greet, 2000, "John", sayName);
输出
Hello world
Hello John
在上述程序中,代码是同步执行的。sayName()
函数作为参数传递给了 greet()
函数。
setTimeout()
方法在 2 秒后才执行 greet()
函数。然而,sayName()
函数等待 greet()
函数的执行。
注意:当您需要等待一个需要时间的结果时,回调函数非常有用。例如,来自服务器的数据,因为数据到达需要时间。