js中的异步

Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推)。

这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),

往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。为了解决这个问题,

Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)。

“同步模式" 就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的

;"异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调

函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

“异步模式" 非常重要。在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。在服务器端,

"异步模式"甚至是唯一的模式,因为执行环境是单线程的,如果允许同步执行所有http请求,服务器性能会急剧下降,很快就会失去响应。

一、回调函数

js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数。

因为函数实际上是一种对象,它可以存储在变量中,通过参数传递给另一个函数,在函数内部创建,从函数中返回结果值”,

因为函数是内置对象,我们可以将它作为参数传递给另一个函数,到函数中执行,甚至执行后将它返回。

二、ajax

待定

三、事件的绑定

事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。

这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut、也可来自浏览器内核的其他线程如

鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。

四、定时器

首先要说的是,定时器相关的方法都是属于BOM方法,而定时器呢,它是用于在设定的时
间执行一段代码,或者在给定的时间间隔内重复该代码。具体函数:

setTimeout(callback, delay);//delay一定的时间后,执行回调函数只执行一次

setInterval(callback, delay);//每隔一段时间执行一次callback,反复执行

clearInterval(timer);//清除定时器

JS是单线程的,既然是单线程那么就很容易出现线程被堵塞的情况,怎么解决
呢?——异步!

代码如下:

var num = 1;
setTimeout(function() {
num++;
console.log(num);
}, 1000);
console.log(num); //结果并是不(2,1)而是(1,2)

为什么会这样?前面说过了,JS会把定时器事件异步处理,也就是说它并不会等待定时器事件

处理完成后再执行下面的代码,而是直接将定时器事件插入到事件队列当中后,直接执行下面

的代码,当定时器事件执行完成后JS再反过头来执行定时器事件的回调部分代码,这就是异步!

异步可以有效的防止JS线程被堵塞,且会有很高的效率,能够使JS在有限的资源下做更多的事

情,这一点是很了不起的。

最新文章

  1. 独立IP 与 共享IP
  2. 关于Composer——好久不动手了。。。
  3. jQuery MiniUI开发系列之:创建组件对象
  4. hbase的regionserver宕机
  5. jeecg团队招新人(5人)
  6. java的JVM机制
  7. SDK "iphoneos" cannot be located
  8. AJAX与servlet的信息交互
  9. Rails 看起来很不错哦。
  10. 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩
  11. Asp.net中用户自定义控件 ascx的使用
  12. HDU 4729 An Easy Problem for Elfness (主席树,树上第K大)
  13. DllMain加载其他DLL造成的死锁问题及其解决办法
  14. 【Unity3D技术文档翻译】第1.3篇 创建 AssetBundles
  15. hdu5556 Land of Farms
  16. C# .NET 0命令行安装Windows服务程序
  17. jenkins启动
  18. python基础之小数据池
  19. MySQL Execution Plan--IN查询计划(2)
  20. 【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)

热门文章

  1. JBOSS AS 性能调整优化
  2. Generic detail view PostDetailView must be called with either an object pk or a slug.解决
  3. luogu4449 于神之怒加强版(莫比乌斯反演)
  4. java.sql.Date/ java.util.Date/ java.util.Calendar 用法与区别
  5. 合并queryset
  6. Nginx01---简单使用
  7. es6-01
  8. Experimental Educational Round: VolBIT Formulas Blitz J
  9. Linux文件扩展名
  10. vue中this.$router.push() 传参