异步:规定要做一件事,不是立马执行这件事,需要等一定的时间,这样的话,我们不会等着它执行,而是继续执行下面的操作,只有将下面的事情处理完了,才会返回头处理之前的事情;如果下面的事情并没有处理完成,不管之前的事情有没有到时间,都踏踏实实的给我等着;
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
如果该调用需要耗费很多时间,执行队列就会因等待而阻塞,采用回调函数,执行队列继续进行,等到调用结束,通过调用回调函数的方式,通知执行队列,处理执行结果.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。