昨天看到了有關回調函數的問題,因爲以前沒學明白,致使遇到這個函數直接就懵了,昨晚潘老師講了好久,當時也是沒理解太多,後來本身細細理解了一下,在此作一個總結吧。函數
var map = function(callBack){ callBack(6) }; map((a) => {console.log(a)});
上述代碼的執行結果是6,其實回調函數的執行順序是這樣的,先來看一下下面這段代碼:spa
var map = function(callBack){ console.log(callBack); }; map((a) => {console.log(a)});
這段代碼的執行結果是 (a) => {console.log(a)},由於map方法接收的第一個參數爲一個函數,對於最下面這行代碼來講,它的參數只有一個,而且是一個函數,對應上面對它的定義,callBack是map方法要接收的第一個參數,那麼 callBack 就等於 (a) => {console.log(a)} ,callBack如今就是一個函數,他能夠接收一個參數,而後把這個參數打印出來,callBack(6),callBack方法此時接收的函數是6,那麼輸出結果天然就是6.code
假如map接收多個參數,想要輸出,那要怎樣實現呢,來看下面一段代碼:blog
var map = function(first,second){ first('hello'); second('world'); }; map((a) => {console.log(a);}, (b) => {console.log(b);});
輸出結果天然是
hello
world
對於多個參數來講,函數與函數之間要用 「 , 」 間隔,用以表示不一樣參數,調用原理同上。回調函數
對於下面這種參數裏面還有函數的又怎麼理解呢:it
var map = function (callBack){ callBack((message)=>{ console.log(message); }); }; map((b) => {b(6)});
上面的代碼執行後打印的值是6,來看一下爲啥吧:io
var map = function (callBack){ callBack((message)=>{ console.log(message); }); }; map((b) => {console.log(b)});
map在定義時接收到的第一個參數是一個函數表達式,下面接收到的第一個參數是b,那麼毋庸置疑,b就等於
(message)=>{console.log(message);}console
再看上面的b(6),b就是一段函數,它接收一個參數,並把它打印出來,那麼這個參數就是6,執行結果也就是6.function
對於更復雜的怎麼理解呢:class
var map = function(callback) { callback( function(messageSecond) {messageSecond('hello')} ); } map( function callback(messageFirst) { messageFirst((abc) => console.log(abc));} );
咱們先來打印一下各自的值:
var map = function(callback) { callback( function(messageSecond) { console.log(2); console.log(messageSecond); messageSecond('hello')} ); } map( function callback(messageFirst) { console.log(1); console.log(messageFirst); messageFirst((abc) => console.log(abc));} );
對於messageFirst來講,它是callBack裏面的內容,對於map的定義來講,裏面的內容是一個方法,那麼messageFirst就是裏面的方法,這個方法須要一個參數,這個參數也是一個方法,此時messageSecond是messageFirst的參數,也是一個方法,即(abc) => console.log(abc));
messageSecond('hello')就至關於給方法(abc) => console.log(abc));傳參爲'hello',而後打印出來。
當時沒理解太清楚,就感受比較懵,當本身親自進行實踐,發現其實也還算好理解,好在終於搞明白回調函數啥意思了。