前言
回調(diào)函數(shù)作為我們經(jīng)常用到的一種函數(shù),看似復(fù)雜,實則很容易理解,下面讓我來帶你一步步理解回調(diào)函數(shù)。
詳解
我們先來看一個我們最熟悉的普通函數(shù)的定義與調(diào)用。
function map (c) {
console.log(c);
}
map(5);
這是我們最常見的函數(shù),而這種函數(shù)定義時就是規(guī)定了方法,而需要傳入變量。
那我們換一種思維,我們規(guī)定好函數(shù)的變量,而傳入方法呢,我們這里設(shè)置方法b為我們的形參
var map = function (b) {
b(4);
}
這時我們發(fā)現(xiàn),我們在調(diào)用函數(shù)map的時候需要傳入一個方法進去,那我們就按照定義傳入一個方法。
map( function(a) {
console.log(a);
} );
此時我們并沒有給這個傳入的方法起名字,這個方法又稱之為匿名函數(shù),所以我們這里調(diào)用map方法時可以簡寫為
map((a) => {
console.log(a);
});
打印4,而我們紅框里的內(nèi)容就是我們傳入的參數(shù),這不過這個參數(shù)是一個函數(shù)罷了。也就是說,紅框里的內(nèi)容與上面的形參b相等,我們用紅框里的函數(shù)去替換b,就得到了 console.log(4) 。
二次回調(diào)函數(shù)
我們再來看一個二次回調(diào)的例子
剛才我們在函數(shù)定義時規(guī)定了變量是一個常數(shù),而如果我們將這個常數(shù)換為一個匿名函數(shù)呢
var map = function (b){
b( (a)=>{
console.log(a);
} );
};
我們看到,剛才的4換為了一個函數(shù),我們?nèi)绾稳フ{(diào)用方法map呢?
我們可以逆向思維想象一下,我們調(diào)用函數(shù)map時需要傳入一個參數(shù),參數(shù)替代b,而我們此時b里已經(jīng)有了方法,而缺少變量,這就相當(dāng)于我們上面講一次回調(diào)函數(shù)時的調(diào)用函數(shù)部分,此時我們傳入一個定義了變量而參數(shù)是個方法的方法進去,就相當(dāng)于一次回調(diào)函數(shù)的函數(shù)定義部分。
map( function (e) {
e(6);
} );
簡寫為 map( (e) => {e(6);} ); 。
此時我們紅框里的內(nèi)容依舊相當(dāng)于上面的形參b,而替換掉b以后,我們藍框里的內(nèi)容就相當(dāng)于下面的形參e,再替換掉e以后,就只剩下了我們最終想要表達的打印方法 console.log(6); 。
總結(jié)
根據(jù)二次回調(diào)函數(shù)的思想,我們可以無限回調(diào)。但我們對多次回調(diào)函數(shù)很少用到。
我們對于基礎(chǔ)知識應(yīng)該牢牢把握才能理解整篇代碼。






