目录
  1. 1. 函数作为参数
    1. 1.1. 函数作为参数的案例
      1. 1.1.1. 语法:
      2. 1.1.2. 参数
      3. 1.1.3. 返回值
      4. 1.1.4. 比较函数
        1. 1.1.4.1. 从大到小
        2. 1.1.4.2. 从小到大:
      5. 1.1.5. 简单数字比较
        1. 1.1.5.1. 从大到小:
        2. 1.1.5.2. 从小到大:
JS高阶函数之函数作为参数调用

函数作为参数

匿名函数作参数:

function f1(fn) {
console.log("f1的函数");
fn(); //此时fn当成是一个函数来使用的
}
//fn是参数,最后作为函数使用了,函数是可以作为参数使用
//传入匿名函数
f1(function () {
console.log("我是匿名函数");
});

命名函数作参数:

function f1(fn) {
console.log("f1的函数");
fn(); //此时fn当成是一个函数来使用的
}
//命名函数
function f2() {
console.log("f2的函数");
}
f1(f2);

函数作为参数的时候,如果是命名函数,那么只传入命名函数的名字,没有括号

函数作为参数的案例

给一个数组,对数组进行排序

var arr = [1, 100, 20, 200, 40, 50, 120, 10];
//排序
arr.sort();
console.log(arr);

然而并没有达到想要的样子,由于sort取决于具体实现,因此无法保证排序的时间和空间复杂性。

查阅文档可以发现,其实sort有一个参数

语法:

arr.sort([compareFunction])

参数

  • compareFunction 可选

    用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。firstEl第一个用于比较的元素。secondEl第二个用于比较的元素。

返回值

排序后的数组。请注意,数组已原地排序,并且不进行复制。

注意:

如果没有指明 compareFunction ,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 “Banana” 会被排列到 “cherry” 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 “80” 要比 “9” 要靠前。

如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;

  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);

  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。

  • compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

因此,我们需要改造一下上面的代码,将写入一段比较函数提高sort的准确性

比较函数

从大到小

var arr = [1, 100, 20, 200, 40, 50, 120, 10];
//排序---函数作为参数使用,匿名函数作为sort方法的参数使用,那么此时的匿名函数中有两个参数,
arr.sort(function (obj1, obj2) {
if (obj1 > obj2) {
return -1;
} else if (obj1 == obj2) {
return 0;
} else {
return 1;
}
});
console.log(arr);

从小到大:

var arr = [1, 100, 20, 200, 40, 50, 120, 10];
//排序---函数作为参数使用,匿名函数作为sort方法的参数使用,那么此时的匿名函数中有两个参数,
arr.sort(function (obj1, obj2) {
if (obj1 > obj2) {
return 1;
} else if (obj1 == obj2) {
return 0;
} else {
return -1;
}
});
console.log(arr);

此方法可以比较字符串以及数字,若只需要单独比较数字,而非字符串的话,有更加简单的方法

简单数字比较

从大到小:

var arr = [1, 100, 20, 200, 40, 50, 120, 10];
arr.sort(function (obj1, obj2) {
return obj2 - obj1
});
console.log(arr);

从小到大:

var arr = [1, 100, 20, 200, 40, 50, 120, 10];
arr.sort(function (obj1, obj2) {
return obj1 - obj2
});
console.log(arr);
文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-07/09/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/JS/JS%E9%AB%98%E9%98%B6%E5%87%BD%E6%95%B0%E4%B9%8B%E5%87%BD%E6%95%B0%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E8%B0%83%E7%94%A8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论