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

  • 相关阅读:
    Socket与系统调用深度分析
    AudioRecord::getMinFrameCount
    c++: address argument to atomic operation must be a pointer to _Atomic type
    python秒表,方便测试计时
    Android驱动笔记(13)——PMIC reset介绍
    Android驱动笔记(10)——DOS或BAT脚本语法
    第八章——Linux设备模型(1)
    第四章——IOCTL(1)
    第三章(扩展)——虚拟串口设备
    第三章——字符驱动设备
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/7115864.html
Copyright © 2011-2022 走看看