回調(diào)函數(shù)是將參數(shù)傳入另一個(gè)函數(shù),在另一個(gè)函數(shù)內(nèi)部實(shí)現(xiàn)調(diào)用的函數(shù),本質(zhì)上被構(gòu)造出來后是一個(gè)函數(shù)對(duì)象,可以作為函數(shù)參數(shù)使用。
例如,首先寫一個(gè)函數(shù):
function text(callback) {
? ? ?console.log("this is a bug");
? ? ? callback();
}
再定義一個(gè)函數(shù)“
fiction log() {
? ? ? ?console.log("this is a callback");
}
text(log);
這樣的話,既執(zhí)行了第一個(gè)函數(shù),同時(shí)也執(zhí)行了第二個(gè)函數(shù)。
同時(shí),回調(diào)函數(shù)也可以根據(jù)需求改變傳入的回調(diào)函數(shù)來間接改變主調(diào)函數(shù)的功能,讓程序變得更加靈活
借用一下上面的例子,將第二個(gè)函數(shù)變?yōu)椋?/p>
function printNumber() {
? ? ? ? ? console.log("123")
}
text(printNumber);
這樣得到的結(jié)果就會(huì)顯示第二個(gè)函數(shù)變了
寫一個(gè)簡單的例子來應(yīng)用一下回調(diào)函數(shù):
定義一個(gè)冒泡函數(shù),回調(diào)函數(shù)用于確定數(shù)組是升序還是降序排序
function bubbleSort(array,callback) {
? ? ?for ( var i = 0 ; i < array.length - 1 ; i++) {
? ? ? ? ? ? ? for (var j = 0 ; j < array.length - i - 1 ; j++) {
? ? ? ? ? ? ? ? ? ? ? ?if ( callback(array[j] , array[ j + 1]) ) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var tmp = array[j];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? array[j] = array[ j + 1];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?array[j + 1] = tmp;
? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? }
? ? ? ? }
function ascending(a,b) {
? ? ? ? ?return ? a > b ;
}
function descending(a,b) {
? ? ? ? ?return ? a < b;
}
var ?array = [ 4,5,,5,6,3,2,8,9,5,4,1,4];
bubbleSort(array,ascending);
console.log(array);
bubbleSort(array.descending);
console.log(array);
這樣就可以得到升序和降序的排列了