javascript基礎總結(二)——異步編程狀況

異步:規定要作一件事,不是立馬執行這件事,須要等必定的時間,這樣的話,咱們不會等着它執行,而是繼續執行下面的操做,只有將下面的事情處理完了,纔會返回頭處理以前的事情;若是下面的事情並無處理完成,無論以前的事情有沒有到時間,都踏踏實實的給我等着;javascript

一、定時器都是異步編程

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

全部的定時器都會放在任務隊列池中,時間短的放在前面;java

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

若是定時器時間同樣會從上向下執行;jquery

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

二、全部的事件綁定都是異步編程

for 循環執行完成後纔會走綁定事件ajax

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

三、ajax異步讀取數據時

四、經過回調函數實現異步

經過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

若是該調用須要耗費不少時間,執行隊列就會因等待而阻塞,採用回調函數,執行隊列繼續進行,等到調用結束,經過調用回調函數的方式,通知執行隊列,處理執行結果.異步

相關文章
相關標籤/搜索