js同步与异步编程

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、回调函数也是异步编程的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容