Ajax篇章(三)—异步之回调函数
通过上篇博文,我们了解到XMLHttprequest是怎样实现不重载整个页面的情况下与Web服务器交换数据。但它是如何进行异步操作,而回调函数又使怎样的呢?
一、同步与异步 通过查资料了解到, JavaScript 语言的执行环境是"单线程"。 单线程是指前一任务必须完成了,才可以进行下一个任务,必须按着顺序执行。例如:排队买票
优点:简单、容易理解和部署; 缺点:不利于代码的阅读和维护,各个部分之间高耦合,流程会很混乱。常见的浏览器无响应(假死),往往就是因为某一段 JavaScript 代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。 为解决此问题,JS引入了同步与异步的模式。 "同步模式":程序的执行顺序与任务的排列顺序是一致的、同步的; "异步模式"则完全不同,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
二、回调函数 定义 回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的。 步骤: ⑴定义
⑵实现一方初始化时,将回调函数的函数指针注册给调用者;
⑶当特定条件发生时,调用者使用函数指针调用回调函数对事件进行处理。
function a(fn){ alert(“这是原来的AA方法”) fn(); } function b(){ alert(“这是回调以后的BB方法”) } a(b) 采用这种方式,我们把同步操作变成了异步操作,a不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。 实例情况:
实例1:
假设我们要编写一个库,它提供了某些排序算法的实现(如冒泡、快速等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;可以使用函数指针,并进行回调
实例2:
诸葛亮给赵子龙一个锦囊,吩咐他危急时打开按锦囊指示办,锦囊里的命令就是回调函数,而锦囊就相当于注册回调函数,危急时刻就是回调的时机。
小结: 回调函数需要在实践中多去了解和体会,这部分总结先到这里,随着以后的深入再去学习。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |