標籤:一個 builds 常用函數 func asc class 不同 ascii 調用
高階函數:將函數作為參數或者傳回值的函數。將函數作為參數的用法通常稱作回呼函數,函數參數通常會在主函數被執行之後被高階函數調用。
高階函數的使用執行個體。可以把有相似操作的函數用一個高階函數來重構,精簡代碼
如有一個比較函數:compareNumbers
1 function compareNumbers(x, y){ 2 3 if(x > y){ 4 5 return -1; 6 7 }else{ 8 9 return 1;10 11 }12 13 return 0;14 15 }16 17 //我們在排序的時候講compareNumbers作為參數傳遞給sort 函數,就可以指定數組的排序方式18 19 [3, 1, 4, 1, 5, 9].sort(compareNumbers);//[1, 1, 3, 4, 5, 9]
當然我們可以直接把compareNumbers替換為一個匿名函數,簡化代碼。
1 [3, 1, 4, 1, 5, 9].sort(function (x, y) { 2 3 if(x > y){ 4 5 return -1; 6 7 }else{ 8 9 return 1;10 11 }12 13 return 0;14 15 });//[1, 1, 3, 4, 5, 9]
產生26個字母組成的字串
1 var aIndex = "a".charCodeAt(0);//97 字元a的ascii編碼 2 3 var alphabet = ""; 4 5 for (var i = 0; i < 26; i++){ 6 7 alphablet += String.fromCharCode(aIndex +i); 8 9 }10 11 alphabet;//"abcdefghijklmnopqrstuvwxyz"
產生一個包含數位字串
1 var digits = ‘‘‘;2 3 for (var i = 0; i< 10; i++){4 5 digits += i;6 7 }8 9 digits;//"0123456789"
建立一個隨機的字母字串,長度為8
1 var random = "";2 3 for (var i = 0; i < 8; i++){4 5 random = String.fromCharCode(Math.floor(Math.random() * 26) + aIndex);6 7 }8 9 random;//"bdwvfrtp"
對於上面的三種產生字串的邏輯,基本類似,只是生層規則不一樣,我們就可以把不同產生字串的邏輯抽出,放到一個函數類型的形參裡。
1 function buildString(n, callback) { 2 3 var result = ""; 4 5 for(var i = 0; i < n; i++) { 6 7 result += callback(i); 8 9 }10 11 return result;12 13 }
現在可以簡化這三個產生字串的方法為:
1 var alphabet = buildString(26, function(i){ 2 3 return String.fromChar(aIndex + i); 4 5 }); 6 7 8 var digits = buildString(10, function(i){ 9 10 return i;11 12 });13 14 15 var alphabet = buildString(26, function(i){16 17 return String.fromChar(Math.floor(Math.random()*26));18 19 });
參考資料:Effective JavaScript
js裡常用函數之高階函數