詳解回調函數

前言

回調函數做爲咱們常常用到的一種函數,看似複雜,實則很容易理解,下面讓我來帶你一步步理解回調函數。spring

詳解

咱們先來看一個咱們最熟悉的普通函數的定義與調用。springboot

function map (c) {
  console.log(c);
}
map(5);

image.png
這是咱們最多見的函數,而這種函數定義時就是規定了方法,而須要傳入變量。
那咱們換一種思惟,咱們規定好函數的變量,而傳入方法呢,咱們這裏設置方法b爲咱們的形參ide

var map = function (b) {
    b(4);
}

這時咱們發現,咱們在調用函數map的時候須要傳入一個方法進去,那咱們就按照定義傳入一個方法。函數

map( function(a) {
    console.log(a);
} );

此時咱們並無給這個傳入的方法起名字,這個方法又稱之爲匿名函數,因此咱們這裏調用map方法時能夠簡寫爲ui

map((a) => {
  console.log(a);
});

image.png
打印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);} );
image.png
此時咱們紅框裏的內容依舊至關於上面的形參b,而替換掉b之後,咱們藍框裏的內容就至關於下面的形參e,再替換掉e之後,就只剩下了咱們最終想要表達的打印方法console.log(6);get

總結

根據二次回調函數的思想,咱們能夠無限回調。但咱們對屢次回調函數不多用到。
咱們對於基礎知識應該緊緊把握才能理解整篇代碼。
若是想深刻了解回調函數,請閱讀:
回調函數 (選學)回調函數

相關文章
相關標籤/搜索