zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/7115864.html
Copyright © 2011-2022 走看看