Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
维护哪一个更有效:JavaScript函数引用还是布尔+;如果条件允许的话?_Javascript_Node.js_Function_Reference - Fatal编程技术网

维护哪一个更有效: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()