javascript查找表是在初始化之前还是之后执行函数?
Does a javascript look up table execute a function before or after initialization?
如果以前有人问过这个问题,我很抱歉,但是我找不到任何我能想到的关键字。
我在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]();
}
相关文章:
- 如何在`window.open`之后执行回调
- 在$state.go之后执行$window.location.reload(true)
- Javascript:在每个onmouseover事件之后执行2个函数
- 可以使 jquery 点击事件在所有其他点击事件之后执行
- 在两个元素的 onrender 事件之后执行函数
- 流星技术/模式,用于等待数据库变量更改,然后在 in 之后执行某些操作
- 在jQuery .load Ajax之后执行if-statement
- 使javascript在firefox中的插件javascript之后执行
- 在catch之后执行
- 是否可以在特定的console.log()条目之后执行Javascript函数
- oncomplete 方法并不总是在操作 JSF 之后执行
- nodejs:setImmediate 回调在 setTimeout(fn, 0) 之后执行,与 nodejs 文档描述
- 为什么我不能在我的OnclientClickEvent之后执行我的onClick
- 在 ajax 之后执行数据表或重新绘制表
- 在 jQuery / Javascript 中的 bind() 事件之后执行条件
- 如何使 jQuery 语句在 .load() 之后执行
- 在具有 FS 操作的 FOR 循环之后执行
- 在 dgrid renderRow 之后执行一个函数
- window.print() 之后的 Javascript 有时在打印对话框之前执行,有时在打印对话框之后执行
- 在 3SE 之后执行函数