2013-12-17 160 views
2

如果函数返回多个计算,并且在少数单独的实例中重用该函数很方便,是否最好将计算结果存储在内部数组中,并最好将其从该数组需要在该特定呼叫上进行计算还是存在更有效的方法?调用返回多个值的函数

var calcFunction = function() { 

    var ar = []; 

    var calcA = ... 
    ar.push(calcA); 

    var calcB = ... 
    ar.push(calcA); 

    return ar; 

} 

回答

1

以下是我的首选项,按我的偏好排序。性能,如果真的相关,你应该基准。偏好取决于你的代码和目的。

 // If independent and appropriate, split it into two separate functions 
     // modularization into smaller reusable building blocks is good 
     var calcAFunction = function() { 
      var calcA = ... 
      return calcA; 
     } 

     var calcBFunction = function() { 
      var calcB = ... 
      return calcB; 
     } 

     // Returning an array 
     var calcFunction = function() { 

      var ar = []; 

      var calcA = ... 
      ar.push(calcA); 

      var calcB = ... 
      ar.push(calcA); 

      return ar; 

     } 
     // Returning an object, disadvantage you must maintain key names as opposed to index 
     var calcFunction = function() { 

      var o = {}; 

      var calcA = ... 
      o.key1 = calcA; 

      var calcB = ... 
      o["key2"] = calcB; 

      return o; 

     } 
     // Calling it with a callback function 
     var calcFunction = function(cb) { 

      var o = {}; 

      var calcA = ... 

      var calcB = ... 

      cb(calcA, calcB) 

     } 
     calcFunction(function(A, B) {}) 

UPDATE

 // Returning an object, disadvantage you must maintain key names as opposed to index 
     var calcFunction = function() { 

      var o = {}; 

      var calcA = ... 
      o.key1 = calcA; 

      var calcB = ... 
      o["key2"] = calcB; 

      return o; 

     } 

     var retObj = calcFunction(); 
     //you can access retObj.key1 and retObj.key2 
+0

我怎么叫这个,如果它是'的问题o [ “键2”] = CALCB;'路,我需要CALCB价值? – user3101259

+0

@ user3101259我刚刚补充说明了两种方法可以在对象上设置按键。你可以通过_o.key2_或_o。[“key2”] _来访问返回对象。当你的键名有空格时,后一种语法非常有用,例如_o。[“with space”] _(_o.with space_将不起作用) – cbayram

+0

我的意思是整行..'var foo = calcFunction(o 。[“key2”]);'? – user3101259

2

如果你的功能是很长的,这将是更有效地使用数组每一次,然而,这距离变短的功能变短。但是,这不是使用数组的唯一原因。使用相同的值多次调用函数基本上是代码重复,这是一种标准的代码异味。总体而言,如果您可以尽可能少地调用方法,那么您的工作就是正确的。