新手方法:什么是javascript回调函数?

新手方法:什么是javascript回调函数?,javascript,callback,Javascript,Callback,只是一个在调用它的另一个函数完成后执行的函数 请告诉我,我对编程一无所知,我发现很难找到一个合适的新手回答或解释这意味着什么 我可以请求stackoverflow专家试一试吗?回调函数是在另一个进程结束时自动调用的函数。 它们在异步过程中非常有用,比如获取页面 编辑 例如: 您希望获得一个ajax调用(例如获取一个页面)。 当加载完成时,您希望运行一些函数 使用jquery,您可以使用: $.get('PageIWant.html', myCallBack); function myCall

只是一个在调用它的另一个函数完成后执行的函数

请告诉我,我对编程一无所知,我发现很难找到一个合适的新手回答或解释这意味着什么


我可以请求stackoverflow专家试一试吗?

回调函数是在另一个进程结束时自动调用的函数。 它们在异步过程中非常有用,比如获取页面


编辑

例如: 您希望获得一个ajax调用(例如获取一个页面)。 当加载完成时,您希望运行一些函数

使用jquery,您可以使用:

$.get('PageIWant.html', myCallBack);

function myCallBack (data){
  alert('I have got the page!');
}

回调只是一个您指定的函数,它不是立即调用,而是通常在某个事件之后调用。这可能类似于ajax请求,您可以指定一个回调,该回调仅在ajax请求成功完成且没有出错时调用。另一个例子是当网页中的DOM准备好,或者窗口加载时的回调。

想象一下,你有一些复杂的代码,在中间,你必须做“某事”。问题是:您不知道“某物”可能是什么,因为这取决于代码的使用方式。回电话进行救援

不需要代码,只需在那里放置回调。用户可以提供自己的一段代码,它将在正确的时间执行,以完成一些关键的事情。示例:
jQuery.filter(回调)

jQuery(您应该了解一下)将为列表中的每个元素调用
callback
。然后,回调函数可以检查元素,如果它符合某些条件,则返回
true


这样,我们就拥有了两个世界中最好的一个:jQuery的聪明人创建了过滤器,你说了要查找的具体内容。

通常,一个回调函数在调用另一个函数完成后使用(就像你在问题中所说的那样)。AJAX请求就是一个很好的例子:大多数库都有一个函数,允许您在后台向服务器发送请求,而无需刷新页面(这使用AJAX)。您通常为这个AJAX函数提供两个回调函数:成功函数和失败函数

如果此请求成功,它将调用success函数,以便您的代码可以执行它需要的操作;例如,它可能会刷新页面的一部分,制作某种动画,或者提醒用户他们的信息已保存。另一方面,如果失败,回调函数可能会提醒用户他们的数据没有保存,应该重试

回调函数允许库开发人员创建其他人可以使用的非常通用的代码,然后根据自己的需要进行自定义

下面是一些jQuery代码,向您展示了上面的示例(由于URL不存在,此代码无法工作):

编辑:开始时,我说,“一般来说……”。实际上,回调的作用远不止于函数完成时。正如其他答案中所述,它可以在函数中的任何位置使用:开始、中间和结束。基本思想是,代码的开发人员可能不知道您将如何使用他的代码。因此,他使它非常通用,并使您能够对数据执行任何需要的操作

一个很好的例子是方法,它允许您传入一个回调,该回调将在“数组”中的每个元素上执行(我说的是数组,因为它实际上可以迭代许多可能是或可能不是实际数组的内容)


//下面的代码说明:在每个链接上执行myeachcallback函数
//有一类“特殊链接”
$('a.special_link')。每个(函数myEachCallbackFunction(i){
//link变量将包含当前正在使用的对象
//正在迭代。因此,第一次通过时,它将保持不变
//“someurl.html”链接,第二次它将保存
//'anotherurl.html'链接,以及最后一次保存
//“onelasturl.html”链接
var-link=$(这个);
//将每个链接的背景色更改为红色
css('background-color','red');
});
因此,我们可以从这个示例中看到,jQuery的开发人员实现了.each方法,并允许我们对调用它的每个链接执行任何操作。

回调函数是“对可执行代码的引用,或作为参数传递给其他代码的一段可执行代码。”


这是一篇很好的文章,有助于理解什么是

为了得到一个更一般、更简单的例子,我想出了以下方法,并用参数来执行两个数字的计算:x和y

function doMath (x,y,myMath) {return myMath(x,y);}

function mult (a,b){return a*b;}
function sum (a,b){return a+b;}

alert(doMath(2,2,sum))    
其中myMath是回调函数。我可以将其替换为我想要的任何函数。

这样的代码

var result = db.query('select  * from T'); //use result - Standard function
db.query('select * from T',function(result){
    //use result - Callback function
});
您的软件什么也没做,您只是在等待数据库响应。这会以某种方式阻塞整个过程,或者意味着有多个执行堆栈。但是像这样的一行代码

var result = db.query('select  * from T'); //use result - Standard function
db.query('select * from T',function(result){
    //use result - Callback function
});
允许程序立即返回事件循环

在此执行过程中,服务器发出该请求并继续执行其他操作 当请求返回时(经过数百万个时钟周期), 您可以执行回调,只需要指向 回拨


看看这个答案:+1我相信这将是最完整、正确和简单的回答。正是这样。