只是一个在调用它的另一个函数之后执行的函数,完成吗?
请我(几乎)对编程一无所知,我发现很难找到合适的新手答案或解释这意味着什么。
我可以向 stackoverflow 大师请求试用吗?
只是一个在调用它的另一个函数之后执行的函数,完成吗?
请我(几乎)对编程一无所知,我发现很难找到合适的新手答案或解释这意味着什么。
我可以向 stackoverflow 大师请求试用吗?
通常,回调函数会在您调用的另一个函数完成后使用(就像您在问题中所述)。一个很好的例子是 AJAX 请求:大多数库都有一个功能,允许您在后台向服务器发送请求而无需刷新页面(这使用 AJAX)。您通常会为此 AJAX 函数提供两个回调函数:成功函数和失败函数。
如果这个请求成功,它会调用成功函数,这样你的代码就可以做它需要的事情;例如,它可能会刷新页面的一部分、执行某种动画或提醒用户他们的信息已保存。另一方面,如果失败,回调函数可能会提醒用户他们的数据没有保存,他们应该再试一次。
回调函数允许库开发人员创建其他人可以使用的非常通用的代码,然后根据他们的需要进行自定义。
下面是一些 jQuery 代码,用于向您展示上面的示例(由于 URL 不存在,此代码将不起作用):
jQuery.ajax(
url: '/mywebsite/somepage.php',
success: function itWorked(returnedData) {
// This is the success function and will be called only if the ajax call
// completes succesfully
alert('Yay it worked! ' + returnedData);
},
error: function itFailed(originalRequest, textStatus, errorThrown) {
// This is the error function and will only be called if the ajax call
// has an error
alert('It failed! ' + textStatus + '. ' + errorThrown);
}
);
编辑:一开始,我说,“一般来说......”。实际上,回调不仅仅用于函数完成时。就像其他答案中所述,它可以在函数内部的任何地方使用:开始、中间、结束。基本思想是代码的开发人员可能不知道您将如何使用他的代码。因此,他使它非常通用,并让您能够对数据执行任何您需要的操作。
一个很好的例子是jQuery.each方法,它允许您传入一个回调,该回调将在“数组”中的每个元素上执行(我说数组是因为它实际上可以迭代许多可能或可能不是实际的数组)。
<a href='someurl.html' class='special_link'>Some URL</a>
<a href='anotherurl.html' class='special_link'>Another URL</a>
<a href='onelasturl.html' class='special_link'>One Last URL</a>
// The following code says: execute the myEachCallbackFunction on every link
// that has a class of 'special_link'
$('a.special_link').each(function myEachCallbackFunction(i) {
// The link variable will contain the object that is currently
// being iterated over. So, the first time through, it will hold
// the 'someurl.html' link, the second time it will hold the
// 'anotherurl.html' link, and the last time it will hold the
// 'onelasturl.html' link
var link = $(this);
// Change the background color of each link to be red
link.css('background-color', 'red');
});
所以,我们可以从这个例子中看到,jQuery 的开发人员实现了 .each 方法,并允许我们对调用它的每个链接做任何我们想做的事情。
回调函数是“对可执行代码或一段可执行代码的引用,它作为参数传递给其他代码。”
这是一篇很好的文章,可以帮助理解什么是“回调”函数。
回调只是您指定的一个函数,它不会立即调用,而是通常在某个事件之后调用。这可能类似于 ajax 请求,您将指定一个回调,该回调仅在 ajax 请求成功完成且不会出错时调用。另一个例子是当网页中的 DOM 准备好或窗口加载时的回调。
想象一下,你有一段复杂的代码,就在它的中间,你必须做“某事”。问题:您不知道“某物”可能是什么,因为这取决于代码的使用方式。回调来救援。
您只需在那里放置一个回调,而不是拥有代码。用户可以提供她自己的一段代码,它会在正确的时间执行一些关键的事情。例子:jQuery.filter(callback)
。
jQuery(您应该看看它)将调用callback
列表中的每个元素。然后回调函数可以检查元素并true
在它符合某些条件时返回。
这样,我们就拥有了两全其美的优势:jQuery 的聪明人创建了过滤器,然后您说出要查找的内容。
回调函数是在另一个进程结束时自动调用的函数。它们在异步过程中非常有用,例如获取页面。
编辑
示例:您想要进行 ajax 调用(例如获取页面)。并且您想在下载完成时运行某些功能。
使用 jquery,你可以使用这个:
$.get('PageIWant.html', myCallBack);
function myCallBack (data){
alert('I have got the page!');
}