1

几天前我熟悉了 jQuery,并开始意识到它可以做的小魔法。

我很想知道在 jQuery 中究竟是如何执行带参数的回调,即确切的执行顺序是什么?

我浏览了链接http://docs.jquery.com/Tutorials:How_jQuery_Works

它说的是错误的方式,

$.get('myhtmlpage.html', myCallBack(param1, param2));

正确的方式,

$.get('myhtmlpage.html', function(){
  myCallBack(param1, param2);
});

在第一种情况下,myCallBack 将首先被执行,然后它的返回值将作为 get 的参数。在后一种方法中,get 将返回一个网页,该网页将由 myCallBack 执行。

它是如何在句法上工作的? myCallBack 仍然是一个要获取的参数?我对此有点困惑。

干杯

4

3 回答 3

3

这确实是一个相当模糊的例子。你应该写:

$.get('myhtmlpage.html', function(param1, param2){
  myCallBack(param1, param2);
});

那是因为 jQuery 在内部做了这样的事情(非常简化):

$.get = function(url, callback){
  //make call to url
  //when completed execute callback:
  callback(param1, param2);
}

你也可以写:

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

这也将使用两个参数调用 myCallBack。

于 2009-06-11T16:24:43.887 回答
1

在第一种情况下,myCallBack(param1, param2)立即评估并执行。在这种语法中,它将在被调用之前$.get()被调用。

在第二个实例中,定义了一个未命名的匿名函数,将其封装起来myCallBack()供以后使用。它作为参数存储,$.get()仅在调用后才会触发$.get()

有关回调的更多信息,请参阅Wikipedia 上的回调(计算机科学)

于 2009-06-11T16:26:06.427 回答
0

如果您使用此语法:

myCallBack(param1, param2) 

您正在做的是调用函数并获取结果,就像您调用函数的任何其他时间一样。

如果您使用此语法:

myCallBack

您不是在调用该函数,而是在提及该函数,这就是为什么可以使用此语法将 myCallBack 作为回调函数传递的原因。

第三种方式:

function(){myCallBack(param1, param2);}

将创建一个新的、未命名的函数,其中包含对 myCallBack 的调用。这可以传递给函数调用或分配给变量。

顺便说一句,您应该像在示例中那样小心使用此语法,因为在这种情况下,param1 和 param2 不受匿名函数的约束,它们要么是空白的,要么会填充包含范围内的值。

于 2009-06-11T16:29:39.367 回答