位置:首頁 > 軟件操作教程 > 編程開發(fā) > JavaScript > 問題詳情

JavaScript 回調(diào)函數(shù)

提問人:劉團圓發(fā)布時間:2020-11-25

■知識點

把函數(shù)作為值傳入另一個函數(shù),當傳入函數(shù)被調(diào)用時,就稱為回調(diào)函數(shù),即異步調(diào)用己綁定的函數(shù)。例如,事件處理函數(shù)、定時器中的回調(diào)函數(shù),異步請求中的回調(diào)函數(shù)、replace^方法中的替換函數(shù)、數(shù)組迭代中的回調(diào)函數(shù)(sort、map、forEach、filter、some、every、reduce 和 reduceRight 等)都是回調(diào)函數(shù)的不同應用形式。這些回調(diào)函數(shù)將結(jié)合各章具體的知識點進行介紹,這里不再贅述。下面僅舉兩個示例,演示回調(diào)函數(shù)的應用。

■實例設(shè)計

【示例1】下面的代碼根據(jù)日期對對象進行排序。

//聲明3個對象,每個對象都有屬性id和date 

var a = { id:1, date:new Date(2019,3,12)}, 

b = { id:2, date:new Date(2019,1,14) }, 

c = { id:3, date:new Date(2019,2,26)};

var arr = [a, b, c];                    //存入 arr 數(shù)組中

arr.sort(function(x,y){

    return x.date-y.date;

});                                        //按日期進行排序

for (var i=0; Karr, length; i++) {

    console.log(arr[i].id + " " + arr[i].date.toLocaleString());

}

輸出結(jié)果:

2 2019年2月14日0:00:00

3 2019年3月26日0:00:00 

1 2019年4月12日0:00:00

在數(shù)組排序的時候,會迭代數(shù)組中每個元素,并逐一調(diào)用回調(diào)函數(shù):flinction(x,y)丨return x.date-y.date;}。 


【示例2】在第20章中曾經(jīng)介紹過數(shù)組的map()方法,實際上很多函數(shù)式編程語言均有此函數(shù)。 它的語法形式為:map(array, func),map表達式將flinc函數(shù)作用于array的每一個元素,并返回一個新的 array。下面使用JavaScript實現(xiàn)map(array, func)表達式運算。

function map(array, func){ 

    var res =[]; 

    for(var i in array) {

        res.push(func(array[i]));

    }

    return res;

}

console.log( map([1, 3, 5, 7, 8], function(n){     //返回元素值平方

    return n*n;

}));                                                                 //1,9,25, 49, 64

console.log ( map ( ["one", "two", "three", "four"] , function (item) {//返回首字母大寫

    return item[0].toUpperCase() + item.slice(1).toLowerCase();

}));                                                        //One,Two,Three,Four

    兩次調(diào)用map得到了截然不同的結(jié)果,因為map的參數(shù)本身己經(jīng)進行了一次抽象,map函數(shù)做的是第2次抽象,高階的“階”可以理解為抽象的層次。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(0)
返回頂部