91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中回調函數與異步的關系講解

發布時間:2020-04-11 14:26:42 來源:億速云 閱讀:386 作者:小新 欄目:web開發

這篇文章主要為大家詳細介紹了JavaScript中回調函數與異步的關系,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

首先要知道的是,回調和異步不是同一個東西
我以前認為js中每個回調函數都是異步處理的,實際上并不是,可以同步回調,也可以異步回調

callback 例子

說到callback,大家都在javascript中遇到以下的例子

$('#id').on('click', function(){
    //code
});
$('#id').setTimeout(function(){
    //code
},1000);

這些代碼用了這么久,知道怎么用,但是可能對回調的概念并不是那么清晰

再來個例子

function a(callback) 
{
    alert("執行parent函數a!"); 
    alert("開始調用回調函數"); 
    callback(); 
    alert("結束回調函數"); 
}

function b(){ 
    alert("執行回調函數b"); 
} 

function test() 
{ 
   a(b);
   a(function() { 
        alert("執行匿名回調函數"); 
   }); 
}
test();

執行順序:
執行parent函數a!
開始調用回調函數
執行回調函數b
結束回調函數

執行parent函數a!
開始調用回調函數
執行匿名回調函數
結束回調函數

callback 原理

簡單的說,就是把一個函數作為形參進行傳遞,上面的callback參數可以改為任意名字

callback 用 C++ 實現

不帶參數回調
#include <iostream>
using namespace std; 

//定義回調函數
void Print() 
{
    cout <<"Hello World!\n";
}

//定義實現回調函數的"調用函數"
void Call(void (*callback)())
{
    callback();
}

//在main函數中實現函數回調
int main(int argc,char* argv[])
{
    Call(Print);
    return 0;
}
帶參數回調
#include <iostream>
using namespace std; 

//定義帶參回調函數
void Print(string s) 
{
   cout << s << endl;
}

//定義實現帶參回調函數的"調用函數"
void Call(void (*callback)(string),string s)
{
    callback(s);
}

//在main函數中實現帶參的函數回調
int main(int argc,char* argv[])
{
    Call(Print,"Hello World!");
    return 0;
}

異步例子

經典例子

function a(){
    console.log('執行a');
    setTimeout(function(){
        console.log('setTimeout');
    }, 1000);
}

function b(){
    console.log('執行b');
}

a();
b();

執行順序:
執行a
執行b
setTimeout  (一秒后執行)

異步原理

都知道js是單線程的,所謂的單線程就是一次只能完成一個任務,其任務的調度方式就是排隊,毫無疑問,這樣的效率是不高的,后面的任務必須等到前面的任務執行完畢后才能執行,如果有一個比較耗時的操作,比如ajax請求,文件io
其他語言遇到這種比較耗時的任務往往是開一個線程來處理,但js本身就是單線程的,js對這種任務的處理就是這個一個任務掛載起來,等耗時任務完成后再把回調函數添加到執行隊列尾部
所以,在剛剛這個例子中,即使把延遲時間設置為0,也是一樣的結果

以上就是JavaScript中回調函數與異步的關系的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

穆棱市| 双峰县| 行唐县| 德清县| 金沙县| 乐山市| 孟州市| 惠水县| 自贡市| 芜湖县| 东乡族自治县| 龙门县| 云和县| 天峨县| 星座| 福清市| 襄樊市| 乌恰县| 乌审旗| 灌阳县| 广河县| 朔州市| 兴和县| 尚志市| 高阳县| 宁安市| 怀安县| 图们市| 龙南县| 天镇县| 田林县| 章丘市| 巴彦淖尔市| 镇沅| 边坝县| 禹城市| 鄂托克旗| 宜川县| 萍乡市| 麻江县| 麟游县|