javascript
彻底理解JavaScript中回调函数 (推荐)
在javascript中回調函數非常重要,它們幾乎無處不在。像其他更加傳統的編程語言都有回調函數概念,但是非常奇怪的是,完完整整談論回調函數的在線教程比較少,倒是有一堆關于call()和apply()函數的,或者有一些簡短的關于callback的使用示例。
首先你得先明白一點:
函數也是對象
想弄明白回調函數,首先的清楚地明白函數的規則。先來看個例子:
//可以這樣創建函數 var fn = new Function("arg1", "arg2", "return arg1 * arg2;"); fn(2, 3); //6 這樣做的一個好處,可以傳遞代碼給其他函數,也可以傳遞正則變量或者對象(因為代碼字面上只是對象而已)。
在javascript中,函數是比較奇怪的,但它確確實實是對象。確切地說,函數是用Function()構造函數創建的Function對象。Function對象包含一個字符串,字符串包含函數的javascript代碼。
理解了函數也是對象,先不急聊回調函數,先看看下面代碼:
function say (value) {alert(value); } alert(say); alert(say('hi js.'));只寫變量名 say 返回的將會是 say方法本身,以字符串的形式表現出來。
而在變量名后加()如say()返回的就會使say方法調用后的結果,這里是彈出value的值。
js中函數可以作為參數傳遞
再看下面兩段代碼:
function say (value) {alert(value); } function execute (someFunction, value) {someFunction(value); } execute(say, 'hi js.');與
function execute (someFunction, value) {someFunction(value); } execute(function(value){alert(value);}, 'hi js.');上面第一段代碼是將say方法作為參數傳遞給execute方法
第二段代碼則是直接將匿名函數作為參數傳遞給execute方法
實際上:
function say (value) {alert(value); } // 注意看下面,直接寫say方法的方法名與下面的匿名函數可以認為是一個東西 // 這樣再看上面兩段代碼是不是對函數可以作為參數傳遞就更加清晰了 say;function (value) {alert(value); }這里的say或者匿名函數就被稱為回調函數!
如果還不懂,看看下面并不是很完美的比喻:
你到一個商店買東西,剛好你要的東西沒有貨,于是你在店員那里留下了你的電話,過了幾天店里有貨了,店員就打了你的電話,然后你接到電話后就到店里去取了貨。在這個例子里,你的電話號碼就叫回調函數,你把電話留給店員就叫登記回調函數,店里后來有貨了叫做觸發了回調關聯的事件,店員給你打電話叫做調用回調函數,你到店里去取貨叫做響應回調事件。
回調函數容易混淆點——傳參
兩種回調函數傳參的方法:
將回調函數的參數作為與回調函數同等級的參數進行傳遞
回調函數的參數在調用回調函數內部創建
希望我對回調函數的一點點小總結能對大家有幫助,
關于回調函數還有什么問題可以在下面留言,一起交流。
總結
以上是生活随笔為你收集整理的彻底理解JavaScript中回调函数 (推荐)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDBC连接MySQL
- 下一篇: 正则表达式之IP地址检验