2013-12-17 198 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

如果你的功能是很長的,這將是更有效地使用數組每一次,然而,這距離變短的功能變短。但是,這不是使用數組的唯一原因。使用相同的值多次調用函數基本上是代碼重複,這是一種標準的代碼異味。總體而言,如果您可以儘可能少地調用方法,那麼您的工作就是正確的。