javascript 基础总结(二)——异步编程情况

阅读 322
收藏 29
2017-04-27
原文链接:segmentfault.com

异步:规定要做一件事,不是立马执行这件事,需要等一定的时间,这样的话,我们不会等着它执行,而是继续执行下面的操作,只有将下面的事情处理完了,才会返回头处理之前的事情;如果下面的事情并没有处理完成,不管之前的事情有没有到时间,都踏踏实实的给我等着;

1、定时器都是异步编程

var n = 0;
setTimeout(function(){
    n++;
    console.log(n);//2->1
},1000)

console.log(n);//1->0
var n = 0;
setTimeout(function(){
    n++;
    console.log(n);//2->1
},0)

console.log(n);//1->0

所有的定时器都会放在任务队列池中,时间短的放在前面;


var n = 0;
setTimeout(function(){
    n++;
    console.log('1:'+n);//2:2
},2000)

setTimeout(function(){
    n++;
    console.log('2:'+n);//2:1
},1000)

console.log(n);//1->0

如果定时器时间一样会从上向下执行;

var n =0;
setTimeout(function(){
    n++;
    console.log('1:'+n);
},2000)

var timer= setInterval(function(){
    n++;
    console.log('2:'+n);
    if(n==5){
        clearInterval(timer);
    }
},1000)
//执行顺序
//2:1
//1:2
//2:3
//2:4
//2:5

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

for 循环执行完成后才会走绑定事件

for(var i = 0;i < oLis[i].length;i++) {
    oLis[i].onclick = funciton() {
        changeEvent(i);//i永远是最后一个
    }
    
}

3、ajax异步读取数据时

4、通过回调函数实现异步

通过ajax和setTimeout辅助实现

//jquery中的$.get方法等...
$.get('url', function(p) {
 //some
});
//借助于setTimeout、setInterval
function f1(callback){ 
   setTimeout(function () {       
  // f1的任务代码      
  callback(); // step3     
}, 1000);   
}
f1();//setep1
console.log('x');//step2

如果该调用需要耗费很多时间,执行队列就会因等待而阻塞,采用回调函数,执行队列继续进行,等到调用结束,通过调用回调函数的方式,通知执行队列,处理执行结果.

评论