具有参数混淆的JavaScript事件处理程序和CallBack函数

时间:2013-06-07 16:16:33

标签: jquery event-handling jquery-callback

为什么回调函数以事件处理程序的形式匿名函数传递,确保回调函数在被调用函数执行后执行?

所以我的问题是:

案例1:

$.get( "myhtmlpage.html", myCallBack( param1, param2 ) ); //this wont work

案例2:

 $.get( "myhtmlpage.html", function() { // will execute $.get and then myCallBack

            myCallBack( param1, param2 );

             });

为什么会这样?

2 个答案:

答案 0 :(得分:1)

JavaScript的核心是单线程语言,每个操作都由事件触发。

浏览器在"事件循环中等待#34;发生事件(例如用户输入设备事件,计时器事件,AJAX事件等),并且对于每个事件,它将调用已在该事件上注册的任何已注册的事件处理程序(即回调)。 / p>

事件处理程序完成其工作后,返回传递回"事件循环"。

因此,当您调用$.get()时,jQuery库会在内部创建一个XMLHttpRequest对象,并将提供的回调函数注册为事件处理程序。

不立即调用该函数。运行$.get()之后的任何其他代码,然后控制再次返回到事件循环。

最终XMLHttpObject将创建一个onreadystatechange事件,并将其添加到等待处理的事件队列中。

事件循环将看到该事件,找到已注册的回调并调用它。

简单:)

答案 1 :(得分:0)

myCallBack( param1, param2 )

这是一个函数调用,而不是函数语句,而你需要一个函数作为$ .get()的第二个参数的参数。

你也可以

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