您的位置:首页 > Web前端 > JavaScript

js里常用函数之高阶函数

2017-07-04 11:43 447 查看
高阶函数:将函数作为参数或者返回值的函数。将函数作为参数的用法通常称作回调函数,函数参数通常会在主函数被执行之后被高阶函数调用。

高阶函数的使用实例。可以把有相似操作的函数用一个高阶函数来重构,精简代码

如有一个比较函数: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: