维护哪一个更有效:JavaScript函数引用还是布尔+;如果条件允许的话?
想象一个任务,其中有一个资源数组,它具有维护哪一个更有效:JavaScript函数引用还是布尔+;如果条件允许的话?,javascript,node.js,function,reference,Javascript,Node.js,Function,Reference,想象一个任务,其中有一个资源数组,它具有类型属性。基于此类型需要执行不同的功能。实现这一点的一种方法是通过多个if/else或switch/case条件 // at run time (run many times) if (resources[ix].type == 'TYPE_ONE') { runFuctionOne(); } else{ runFuctionTwo(); } 另一种方法是维护另一个属性,如execute,该属性将被分配一个函数,该函数将满足资源的类型。这
类型
属性。基于此类型
需要执行不同的功能。实现这一点的一种方法是通过多个if/else或switch/case条件
// at run time (run many times)
if (resources[ix].type == 'TYPE_ONE') {
runFuctionOne();
}
else{
runFuctionTwo();
}
另一种方法是维护另一个属性,如execute
,该属性将被分配一个函数,该函数将满足资源的类型
。这样您就不需要if/else条件,可以直接执行其功能,如:
// at assign time (run once)
if (resources[ix].type == 'TYPE_ONE') {
resources[ix].execute = runFunctionOne;
}
else{
resources[ix].execute = runFuctionTwo;
}
// then at run time (run many times)
resources[ix].execute();
那么,哪种方式更有效?有更好的方法吗?
编辑:我更感兴趣的是Node.js环境中的高效解决方案,而不是浏览器环境。我认为函数映射是更好的选择 定义全局地图
var fns = {
'TYPE_ONE' : runFunctionOne,
'TYPE_TWO' : runFunctionTwo
};
然后使用它
var fn = fns[resources[ix].type];
if (typeof fn == 'function') {
fn()
}
或使用
这会导致问题吗?你是什么意思?我已经创建了一个jsperf,它表明在浏览器中函数引用工作得更快。但是Node.js脚本的报告正好相反:if/else比函数引用快3倍。基于属性的函数引用的工作速度似乎稍快一些。请看。@Eye yes如果在浏览器场景中由我决定,我将使用第一种方法
var fn;
switch (resources[ix].type) {
case "TYPE_ONE" :
fn = runFunctionOne;
break;
case '' :
// execute code block 2
break;
default :
//
}
fn()