为什么回调函数以事件处理程序的形式匿名函数传递,确保回调函数在被调用函数执行后执行?
所以我的问题是:
案例1:
$.get( "myhtmlpage.html", myCallBack( param1, param2 ) ); //this wont work
案例2:
$.get( "myhtmlpage.html", function() { // will execute $.get and then myCallBack
myCallBack( param1, param2 );
});
为什么会这样?
答案 0 :(得分:1)
JavaScript的核心是单线程语言,每个操作都由事件触发。
浏览器在"事件循环中等待#34;发生事件(例如用户输入设备事件,计时器事件,AJAX事件等),并且对于每个事件,它将调用已在该事件上注册的任何已注册的事件处理程序(即回调)。 / p>
事件处理程序完成其工作后,返回传递回"事件循环"。
因此,当您调用$.get()
时,jQuery库会在内部创建一个XMLHttpRequest
对象,并将提供的回调函数注册为事件处理程序。
不立即调用该函数。运行$.get()
之后的任何其他代码,然后控制再次返回到事件循环。
最终,XMLHttpObject
将创建一个onreadystatechange
事件,并将其添加到等待处理的事件队列中。
事件循环将看到该事件,找到已注册的回调并调用它。
简单:)
答案 1 :(得分:0)
myCallBack( param1, param2 )
这是一个函数调用,而不是函数语句,而你需要一个函数作为$ .get()的第二个参数的参数。
你也可以
$.get( "myhtmlpage.html", myCallBack);