回调,让我试着用你能理解的方式解释一下。
这允许您传递函数并仅在需要时执行它们,这是我如何将函数传递给变量而不执行它的示例:
a = function(){}
这是一个小例子,也是最常见的,你可以像 a() 这样调用函数,添加 () 告诉函数执行。
- 现在您应该明白了,您可以将这些变量传递给另一个函数,但不能调用它们
以下示例向您展示了如何在执行时将函数传递给上述函数a。
b = function(){}
b(a);
- 下一步是能够创建匿名函数,这将允许您将函数分配给变量,同时传递给另一个函数
匿名函数在编写它时并未分配,而是在外部函数范围内解析时分配。
上面的内容我有点难以理解,但希望这个例子能解决它。
a(
function(){}
);
上面和b(a)的例子一样,除了a现在是一个匿名函数,只赋值给b内的变量,即外层函数。
jQuer'ies API 严重依赖匿名函数,因为它易于使用并与 jQuery 核心和用户代码分离,用户不需要过度依赖 jQuery 的主要代码,而是通过回调来允许 jQuery而是连接到您的代码。
使用类似方法将数据传入和传出函数的函数示例如下:
JoinUser = function(Firstname,Lastname,callback)
{
Fullname = Firstname + " " + Lastname;
callback(Fullname);
}
JoinUser("Robert","Pitt",function(Fullname)
{
alert(Fullname); //Robert Pitt
})
上面的例子只是大致展示了 jQuery 的风格是如何工作的,而不是回调的最重要的好处,那就是 Ajax。
Ajax 可以暂停一个 javascript 脚本,直到它的数据被接收到,例如:
Result = RequestPage("Contacts");
当 Ajax 看到这一行时,它必须等待 RequestPage 返回结果,因为进一步向下的编码预计需要这个值,所以我们必须等待在 JavaScript 继续之前从服务器返回数据,这可能会持续几秒钟并导致 UI 动作异常。
我们解决这个问题的方法是向函数发送回调,并告诉它在完成后调用,因为我想处理应用程序的其余部分。
RequestPage("Contacts",function(){});
所以现在 JavaScript 继续向下执行它需要的任务的页面,在 RequestPage 函数中,它的布局如下:
function RequestPage(page,callback)
{
//..
request.oncomplete = callback;
//..
}
这样,您的应用程序的其余部分已经完成了其他任务,当结果准备就绪时,您可以从结果中更改 UI。
这也是我们使用加载器来复制工作状态的原因。
我希望您开始了解 jQuery 如何利用 javaScript 的这些因素,这将有助于您开发应用程序。