回調(diào)函數(shù)是什么
“我先回家肥惭,到了給你發(fā)短信∥商拢”
如果“我先回家”是函數(shù)goHome蜜葱,那么“到了給你發(fā)短信”,這個(gè)發(fā)短信就是回調(diào)函數(shù)sendMsg耀石。
我必須先回到家以后牵囤,也就是函數(shù)goHome的內(nèi)容執(zhí)行完了,再執(zhí)行函數(shù)sendMsg滞伟。
函數(shù)sendMsg是以參數(shù)形式傳給函數(shù)goHome的揭鳞,那么函數(shù)sendMsg就叫回調(diào)函數(shù)。
肯定有人有疑問:一定要以參數(shù)形式傳過去嗎梆奈,我不可以直接在函數(shù)goHome里面調(diào)用函數(shù)sendMsg嗎野崇?當(dāng)然可以。但是如果你直接在函數(shù)goHome調(diào)用的話亩钟,那么這個(gè)回調(diào)函數(shù)就被限制死了乓梨。使用函數(shù)做參數(shù)就有這樣的好處:當(dāng)你goHome(sendMsg)的時(shí)候函數(shù)sendMsg就成了回調(diào)函數(shù)鳖轰,而你還可以goHome(call)這個(gè)時(shí)候,函數(shù)call就成了回調(diào)函數(shù)扶镀。如果你寫成了
function goHome(){
// do something
sendMsg()
}
就失去了變量的靈活性蕴侣。
JUST DO CODING(放碼過來)
// 回家
function goHome(callback) {
// 現(xiàn)在在回家的過程,可以做一系列的事情
var phone = '玩手機(jī)'
var sleep = '睡覺'
// 最后回調(diào)函數(shù)
callback(phone + sleep + '發(fā)短信');
}
function sendMsg(msg) {
console.log(msg)
}
goHome(sendMsg)
//輸出: 玩手機(jī)睡覺發(fā)短信
這邊可以延伸幾個(gè)概念
1狈惫、函數(shù)也是一個(gè)類型
函數(shù)既然是一種類型睛蛛,也就是說,函數(shù)也可以作為參數(shù)被傳遞胧谈。
上面的代碼,整個(gè)思路走一遍就是
// 回家
function goHome(sendMsg) {
// 現(xiàn)在在回家的過程荸频,可以做一系列的事情
var phone = '玩手機(jī)'
var sleep = '睡覺'
// 最后回調(diào)函數(shù)
sendMsg(phone + sleep + '發(fā)短信');
}
2菱肖、這里的回調(diào)函數(shù)可以直接寫成匿名函數(shù)
goHome(function (msg) {
console.log(msg)
})
為什么要用匿名函數(shù)?
- 取名字太痛苦了
- 《Javascript的一種模塊模式》中的第一句話就是“全局變量是魔鬼”旭从。 匿名函數(shù)可以有效的保證在頁面上寫入Javascript稳强,而不會(huì)造成全局變量的污染。
- 給一個(gè)不是很熟悉的頁面增加Javascript時(shí)非常有效和悦,也很優(yōu)美退疫。
最后說兩句
就是這么簡單
荊軻刺秦王
有疑問或者建議都可以和我交流哦