几天前我熟悉了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仍然是一个参数得到?我对此感到有点困惑。
欢呼声
答案 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不受匿名函数的约束,并且将为空白或填充来自包含范围。