函数作为参数
匿名函数作参数:
function f1(fn) { |
命名函数作参数:
function f1(fn) { |
函数作为参数的时候,如果是命名函数,那么只传入命名函数的名字,没有括号
函数作为参数的案例
给一个数组,对数组进行排序
var arr = [1, 100, 20, 200, 40, 50, 120, 10]; |
然而并没有达到想要的样子,由于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]; |
从小到大:
var arr = [1, 100, 20, 200, 40, 50, 120, 10]; |
此方法可以比较字符串以及数字,若只需要单独比较数字,而非字符串的话,有更加简单的方法
简单数字比较
从大到小:
var arr = [1, 100, 20, 200, 40, 50, 120, 10]; |
从小到大:
var arr = [1, 100, 20, 200, 40, 50, 120, 10]; |