javascript查找表是在初始化之前还是之后执行函数?

Does a javascript look up table execute a function before or after initialization?

本文关键字:之后 执行 函数 查找 初始化 javascript      更新时间:2023-09-26

如果以前有人问过这个问题,我很抱歉,但是我找不到任何我能想到的关键字。

我在javascript中有一个数组,我想确定它的最小/最大值取决于我在的模式,所以我有一个函数:

function arrayMinMax(array, mode) {
  // return min/max value from 1D array
  return {
    0: Math.min.apply(null, array),
    1: Math.max.apply(null, array)
  }[mode]
}

我的问题是:当调用此函数时,是计算min和max的值还是仅计算mode选择的min或max的值?如果前者,这将有较差的性能相比,后者。

两个值都会被计算。我建议你在这里使用"策略"模式。所以它看起来像:

getArrayMinMax: function (array, strategy) {
    //you should pass Math.min or Math.max
    return strategy.apply(null, array)
};

所以它可以这样使用:

getArrayMinMax([1, 2, 3, 4], Math.min);

正如注释中建议的那样,您可以根据模式切换要调用的函数:

/* @param {number} mode - 0 for min, 1 (or any non-zero value) for max
** @returns {number} result of calling Math.min or Math.max on array (may be NaN)
*/
function getMinMax(arr, mode) {
  return mode? Math.max.apply(Math, arr) : Math.min.apply(Math, arr);
}

或者如果你喜欢更少的代码:

function getMinMax(arr, mode) {
  return Math[mode? 'max' : 'min'] .apply(Math, arr);
}

this设置为Math的情况下调用Math方法在任何地方都不是明确要求的,它似乎是合理的,并且不比null更容易输入。

要获得延迟求值,可以将它们包装在函数中:

function arrayMinMax(array, mode) {
  // return min/max value from 1D array
  return {
    0: function() { return Math.min.apply(null, array); },
    1: function() { return Math.max.apply(null, array); }
  }[mode]();
}