js同步与异步编程

2017-08-04  本文已影响0人  gaoqizhuhui

JS是单线程的:js傻,做着当前的事,没完成之前,绝不会做下一件事。

JS中的两种编程思想:同步、异步。

1、同步:

上一件事情没完成,继续处理上一件事情,只有上一件事情完成了,才会做下一件事情(JS中大部分都是同步编程的)

2、异步:

规划要做一件事情,但是不是当前立刻执行的这件事,需要等一定的时间。但不会一直等着它去执行,而是先继续执行下面的操作,只有当下面的事情都处理完了,才会返回头处理之前的事情;如果下面事情并没有处理完,不管之前的事情有没有到时间,都等着它处理完再去执行。

在JS中异步编程只有四种情况:
1、定时器都是异步编程的

var n=0;
window.setTimeout(function(){
    n++;
    console.log(n);  //---->1  (第2次)
},0);
//每一个浏览器对于定时器的等待时间都有一个最小值,如果设置的等待时间小于这个值,还是需要等到最小时间才执行的,尤其是写0也不是立刻执行
console.log(n);  //--->0  (第1次)

定时器设置的等待时间不一定就是最后执行的时间,如果定时器之后还有其他的事情正在处理中,不管定时器的时间有没有到,都是不会执行定时器的

var n=0;
window.setTimeout(function(){
    n+=2;
    console.log(n);  //---->7  (第4次)
},20);
window.setTimeout(function(){
    n+=5;
    console.log(n);  //---->5  (第3次)
},5);  //两个定时器,先到先得
console.log(n);  //---->0   (第1次)
for(var i=0;i<10;i++){}
console.log(n);   //---->0   (第2次)

2、所有的事件绑定都是异步编程的

for(var i=0;i<oLis.length;i++){
   oLis[i].onclick=function(){
       tabChange(i);  //不可以直接用  tabChange(i),因为异步编程,先执行完循环,所以i就都是最后的值了(oLis.length-1),这里要替换成this.index(用异步编程思想解释)
   }
}

3、Ajax读取数据的时候,一般都设置为异步编程
4、回调函数也是异步编程的

上一篇下一篇

猜你喜欢

热点阅读