通过上篇博文,我们了解到XMLHttprequest是怎样实现不重载整个页面的情况下与Web服务器交换数据。但它是如何进行异步操作,而回调函数又使怎样的呢?
一、同步与异步
通过查资料了解到, JavaScript 语言的执行环境是"单线程"。
单线程是指前一任务必须完成了,才可以进行下一个任务,必须按着顺序执行。例如:排队买票
优点:简单、容易理解和部署;
缺点:不利于代码的阅读和维护,各个部分之间高耦合,流程会很混乱。常见的浏览器无响应(假死),往往就是因为某一段 JavaScript 代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。
为解决此问题,JS引入了同步与异步的模式。
"同步模式":程序的执行顺序与任务的排列顺序是一致的、同步的;
"异步模式"则完全不同,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
二、回调函数
定义
回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的。
步骤:
⑴定义
⑶当特定条件发生时,调用者使用函数指针调用回调函数对事件进行处理。
function a(fn){ alert(“这是原来的AA方法”) fn(); } function b(){ alert(“这是回调以后的BB方法”) } a(b)
采用这种方式,我们把同步操作变成了异步操作,a不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。
实例情况:
实例1:
实例2: