我一直在用不同的语言编程。最近,我有机会开始了解jQuery
。我正在阅读回调函数,我理解它的含义(以一种特定的方式做事,一个接一个。)我有点困惑是否将它们与嵌套函数联系起来?不是一样的吗?请帮助清除概念。谢谢。
user379888
问问题
1026 次
3 回答
4
回调函数是在操作完成时调用的任何函数。它在哪里定义并不重要:你可以创建一个局部作用域的函数、一个全局作用域的函数等等。
以回调$.ajax
为例,success
回调在哪里:
function handleSuccess(data) {
$(document.body).append(data);
}
function doAjaxCall() {
$.ajax({url: 'some/path', success: handleSuccess });
}
在功能上等同于:
function doAjaxCall() {
var handleSuccess = function(data) {
$(document.body).append(data);
}
$.ajax({ url: 'some/path', success: handleSuccess });
}
在功能上等同于:
function doAjaxCall() {
$.ajax({ url: 'some/path', success: function(data) {
$(document.body).append(data);
}
});
}
于 2012-05-21T09:12:30.270 回答
1
回调函数只是一个执行回调的函数。:) 所以首先你需要调用,这实际上是任何操作。考虑这个例子:
$.ajax({
url: '/test/'
});
这个方法调用我们的服务器。现在操作是异步的——我们不知道服务器什么时候响应。但我们确实知道它将给我们什么样的数据。所以你定义了回调——服务器响应后你要执行的操作。在这种情况下,您可以定义success
回调:
$.ajax({
url: '/test/',
success: function(res) {
console.log(res);
}
});
回调不必是异步的。考虑这个例子
function test(data, callback) {
if (callback && $.isFunction(callback))
callback(data);
}
jQuery 方法isFunction
只检查是否callback
是一个函数。现在你可以test
这样打电话
test('test_string', function(str) {
console.log(str);
});
作为第二个参数传递的函数是回调。
所以基本上回调只是一个作为参数传递给另一个函数的函数。主要用于异步操作,但不仅限于(生活示例:forEach
Array 对象的方法)。
于 2012-05-21T09:21:10.820 回答
1
如果我错了,请纠正我,但我认为问题是:
$("#someDiv").fadeIn(200, function(){
//do some stuff
});
vs
$("#someDiv").fadeIn(200, callbackFunction);
function callbackFunction()
{
//do some stuff
}
(很抱歉将此作为答案而不是评论发布,但评论没有代码格式)
于 2012-05-21T09:28:04.927 回答