📜  回调函数 js - Javascript (1)

📅  最后修改于: 2023-12-03 14:50:45.283000             🧑  作者: Mango

回调函数 (Callback Functions)

回调函数是Javascript中一个非常重要的概念。它是一种函数,在另一个函数执行完毕后被调用。回调函数可用于异步编程,它们可以帮助我们解决异步代码执行顺序的问题。在本文中,我们将学习什么是回调函数,以及如何使用它们来编写异步代码。

什么是回调函数

回调函数是一种Javascript函数,作为另一个函数的参数传递。当第一个函数执行完毕后,第二个函数(回调函数)被调用。例如,下面的代码中,doSomething()函数将callback函数作为参数传递。

function doSomething(callback) {
  console.log("do something.");
  callback();
}

function callback() {
  console.log("callback function");
}

doSomething(callback);

执行上述代码将输出:

do something. 
callback function 
回调函数的作用

回调函数可以用于异步编程,例如当我们需要从服务器获取数据时,我们不能同步地等待服务器响应。因此我们需要异步编程解决这个问题。下面的例子演示了如何使用回调函数来解决异步编程的问题。

function getDataFromServer(url, callback) {
  let xmlHttp = new XMLHttpRequest();
  xmlHttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      callback(JSON.parse(this.responseText));
    }
  }
  xmlHttp.open("GET", url, true);
  xmlHttp.send();
}

getDataFromServer("https://jsonplaceholder.typicode.com/todos/1", function(data) {
  console.log(data);
});

上述代码演示了一个从服务器获取数据的函数getDataFromServer。此函数获取URL并在服务器响应后调用回调函数,将服务器响应传递给回调函数。回调函数将服务器响应作为参数打印在控制台上。

回调地狱

虽然回调函数可以帮助我们解决异步编程的问题,但不当的使用会导致"回调地狱"。 回调地狱是指多个回调函数被嵌套在一起,使得代码难以理解和维护。下面是一个"回调地狱"的例子:

setTimeout(function() {
  console.log("First Timeout");
  setTimeout(function() {
    console.log("Second Timeout");
    setTimeout(function() {
      console.log("Third Timeout");
    }, 3000);
  }, 2000);
}, 1000);

通过使用Promiseasync / await等方式,可以避免回调地狱。

结论

回调函数是Javascript中的一个重要概念。它们可用于异步编程,可以让我们处理异步代码执行顺序的问题。虽然回调函数能解决异步编程的问题,但不当的使用会导致"回调地狱",代码会变得难懂和维护。因此,我们应该尽可能避免回调地狱,在复杂场景中使用Promiseasync / await等方式处理异步编程的问题。