回调函数是否与嵌套函数相同?

时间:2012-05-21 09:09:01

标签: jquery jquery-ui callback jquery-callback nested-function

我一直用不同的语言编程。最近,我有机会开始了解jQuery。我正在阅读关于回调函数的内容,我理解它的意思(以特定的方式,一个接一个地做事。)我有点困惑要么将它们与嵌套函数联系起来?这不是一回事吗?请帮忙清除这个概念。感谢。

3 个答案:

答案 0 :(得分: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);
    }
   });
}

答案 1 :(得分: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);
});

作为第二个参数传递的函数是回调。

所以基本上回调就是一个函数作为参数传递给另一个函数。主要用于异步操作,但不仅仅是(生活示例:Array对象的方法forEach)。

答案 2 :(得分:1)

如果我错了,请纠正我,但我认为问题是:

$("#someDiv").fadeIn(200, function(){
        //do some stuff 
    });

vs

$("#someDiv").fadeIn(200, callbackFunction);
function callbackFunction()
{
    //do some stuff
}

(很抱歉发布此答案而不是评论,但评论没有代码格式化)