javascript - 回調函數和普通調用函數的區別?
問題描述
回調函數的定義是將b函數當做參數傳給a去執行,此時b就是回調函數,我突然有個疑問,它和a函數里直接調用b有什么區別呢?我自己寫了個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秒鐘才能看到輸出結果,然后改寫為回調函數的形式
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函數的回調函數執行時,并不妨礙a函數的正常執行,按照這個邏輯,第二種方式應該是立即輸出hello world的,難道是我回調函數用錯了嗎?還是理解有問題?
問題解答
回答1:1.性能沒有區別2.回調函數是作為參數傳遞的,操作更加靈活,比如,你可以定義一個函數c,那可以運行 b(c),當你在函數內運行函數的時候,就失去了變量的靈活性。
回答2:嗯,是你理解錯了,調用的效果是一樣的。還有 callback.call(this); 畫蛇添足,跟 callback() 的 this 是一樣的。
回調的好處是依賴倒置,不用修改 a 的代碼就可以讓 a 調用 c、d、e....
相關文章:
1. javascript - 原生JS和jQuety關于設置圖片輪播定時器問題2. mysql - 在下剛入門sql 關于sql的語法詢問3. 請問寫好python模塊以后,文檔怎么寫?4. html5 - 最近在自學react 求一個react表單提交的例子5. java - 新人有一個問題想問問大家,weex怎么動態修改控件高度6. javascript - jq 上傳圖片成功后添加一個新的上傳框時出現問題7. 老師您好!我有一個問題、8. angular.js - 在終端中用yeoman啟用angular-generator報錯,求解?9. 我和老師的代碼對照了幾遍沒發現問題,但是瀏覽器打開就有問題了,求解10. javascript - uc、qq、搜狗 以上三個手機瀏覽器判斷移動端的js代碼不執行
