回調函數做爲咱們常常用到的一種函數,看似複雜,實則很容易理解,下面讓我來帶你一步步理解回調函數。spring
咱們先來看一個咱們最熟悉的普通函數的定義與調用。springboot
function map (c) { console.log(c); } map(5);
這是咱們最多見的函數,而這種函數定義時就是規定了方法,而須要傳入變量。
那咱們換一種思惟,咱們規定好函數的變量,而傳入方法呢,咱們這裏設置方法b爲咱們的形參ide
var map = function (b) { b(4); }
這時咱們發現,咱們在調用函數map的時候須要傳入一個方法進去,那咱們就按照定義傳入一個方法。函數
map( function(a) { console.log(a); } );
此時咱們並無給這個傳入的方法起名字,這個方法又稱之爲匿名函數,因此咱們這裏調用map方法時能夠簡寫爲ui
map((a) => { console.log(a); });
打印4,而咱們紅框裏的內容就是咱們傳入的參數,這不過這個參數是一個函數罷了。也就是說,紅框裏的內容與上面的形參b相等,咱們用紅框裏的函數去替換b,就獲得了console.log(4)
。spa
咱們再來看一個二次回調的例子
剛纔咱們在函數定義時規定了變量是一個常數,而若是咱們將這個常數換爲一個匿名函數呢code
var map = function (b){ b( (a)=>{ console.log(a); } ); };
咱們看到,剛纔的4換爲了一個函數,咱們如何去調用方法map呢?
咱們能夠逆向思惟想象一下,咱們調用函數map時須要傳入一個參數,參數替代b,而咱們此時b裏已經有了方法,而缺乏變量,這就至關於咱們上面講一次回調函數時的調用函數部分,此時咱們傳入一個定義了變量而參數是個方法的方法進去,就至關於一次回調函數的函數定義部分。blog
map( function (e) { e(6); } );
簡寫爲map( (e) => {e(6);} );
。
此時咱們紅框裏的內容依舊至關於上面的形參b,而替換掉b之後,咱們藍框裏的內容就至關於下面的形參e,再替換掉e之後,就只剩下了咱們最終想要表達的打印方法console.log(6);
。get
根據二次回調函數的思想,咱們能夠無限回調。但咱們對屢次回調函數不多用到。
咱們對於基礎知識應該緊緊把握才能理解整篇代碼。
若是想深刻了解回調函數,請閱讀:
回調函數 (選學)回調函數