如何执行带有参数的回调?

时间:2009-06-11 16:18:44

标签: jquery client-scripting

几天前我熟悉了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仍然是一个参数得到?我对此感到有点困惑。

欢呼声

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

在第一个实例中,myCallBack(param1, param2)被立即评估并执行。在此语法中,将在调用$.get()之前调用它。

在第二个实例中,定义了一个未命名的匿名函数,该函数包含myCallBack()以供以后使用。它作为参数存储到$.get(),并且仅在调用$.get()后才会被触发。

有关回调的更多信息,请参阅维基百科的Callback (computer science)

答案 2 :(得分:0)

如果您使用以下语法:

myCallBack(param1, param2) 

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

如果您使用以下语法:

myCallBack

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

第三种方式:

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

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

顺便说一句,你应该像在示例中那样谨慎使用这种语法,因为在这种情况下,param1和param2不受匿名函数的约束,并且将为空白或填充来自包含范围。