js里常用函数之高阶函数

高阶函数:将函数作为参数或者返回值的函数。将函数作为参数的用法通常称作回调函数,函数参数通常会在主函数被执行之后被高阶函数调用。

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

如有一个比较函数: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

posted @   wjwdive  阅读(247)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2016-07-04 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection
点击右上角即可分享
微信分享提示