javascript 中的借鸡生蛋

如题所说,其实指的是 js 中的内置函数和 apply 的结合使用。这种用法很讨巧,读过 jQuery 源码的小伙伴都知道,它在里面被应用的非常广泛和精妙!

梨子:找出一个数组中的最大值和最小值

普遍的做法就是循环遍历数组,进行比较,写出来的代码看着像石榴姐一样,虽然是一个美女,但总感觉有点别扭,怎样把她变成像秋香一样优雅迷人呢?还记得 Math.max 吗

var numbers = [5, 6, 2, 3, 7];

/* using Math.min/Math.max apply */
var max = Math.max.apply(null, numbers); /* This about equal to Math.max(numbers[0], ...) or Math.max(5, 6, ..) */
var min = Math.min.apply(null, numbers);

假如数组很大怎么办呢?把它切段循环传入

function minOfArray(arr) {
  var min = Infinity;
  var QUANTUM = 32768;

  for (var i = 0, len = arr.length; i < len; i += QUANTUM) {
    var submin = Math.min.apply(null, arr.slice(i, Math.min(i + QUANTUM, len)));
    min = Math.min(submin, min);
  }

  return min;
}

var min = minOfArray([5, 6, 2, 3, 7]);

参考:MDN