javascript - 回調(diào)函數(shù)和普通調(diào)用函數(shù)的區(qū)別?
問題描述
回調(diào)函數(shù)的定義是將b函數(shù)當做參數(shù)傳給a去執(zhí)行,此時b就是回調(diào)函數(shù),我突然有個疑問,它和a函數(shù)里直接調(diào)用b有什么區(qū)別呢?我自己寫了個demo
function a(){ b(); console.log(’hello world’);}function b(){ var n = 0; for(var i = 0;i < 1000000000;i++){n++; } return n;}a(); //hello world
大概3秒鐘才能看到輸出結果,然后改寫為回調(diào)函數(shù)的形式
function a(callback){ callback.call(this); console.log(’hello world’);}function b(){ var n = 0; for(var i = 0;i < 1000000000;i++){ } console.log(1);}a(b); //hello world
也是3秒后才能看到輸出結果找了很多文章,都說明了當b作為a函數(shù)的回調(diào)函數(shù)執(zhí)行時,并不妨礙a函數(shù)的正常執(zhí)行,按照這個邏輯,第二種方式應該是立即輸出hello world的,難道是我回調(diào)函數(shù)用錯了嗎?還是理解有問題?
問題解答
回答1:1.性能沒有區(qū)別2.回調(diào)函數(shù)是作為參數(shù)傳遞的,操作更加靈活,比如,你可以定義一個函數(shù)c,那可以運行 b(c),當你在函數(shù)內(nèi)運行函數(shù)的時候,就失去了變量的靈活性。
回答2:嗯,是你理解錯了,調(diào)用的效果是一樣的。還有 callback.call(this); 畫蛇添足,跟 callback() 的 this 是一樣的。
回調(diào)的好處是依賴倒置,不用修改 a 的代碼就可以讓 a 調(diào)用 c、d、e....
相關文章:
1. python - 獲取到的數(shù)據(jù)生成新的mysql表2. javascript - js 對中文進行MD5加密和python結果不一樣。3. mysql里的大表用mycat做水平拆分,是不是要先手動分好,再配置mycat4. window下mysql中文亂碼怎么解決??5. sass - gem install compass 使用淘寶 Ruby 安裝失敗,出現(xiàn) 4046. python - (初學者)代碼運行不起來,求指導,謝謝!7. 為啥不用HBuilder?8. python - flask sqlalchemy signals 無法觸發(fā)9. python的文件讀寫問題?10. 為什么python中實例檢查推薦使用isinstance而不是type?
