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

Как назвать это, если это 'о [ "key2"] = calcB;' путь, и мне нужно значение calcB? – user3101259

+0

@ user3101259 Я просто добавил, что чтобы показать вам два пути, вы можете установить ключ на объект. вы можете получить доступ к этому из возвращаемого объекта как _o.key2_ или _o. ["key2"] _. Последний синтаксис полезен, когда у вас есть пробелы в имени вашего ключа, например, _o. ["С пробелом"] _ (_o.with space_ не работает явно) – cbayram

+0

Я имею в виду всю строку .. 'var foo = calcFunction (o . ["key2"]); '? – user3101259

2

Если вы функция действительно долго, это будет гораздо эффективнее использовать массив каждый раз, однако, это расстояние становится короче и короче, как функция становится короче. Однако это не единственная причина для использования массива. Вызов функции несколько раз с одинаковыми значениями - это, по сути, дублирование кода, что является стандартным запахом кода.

В целом, если вы можете вызвать метод как можно несколько раз, вы сделали свою работу правильно.

Смежные вопросы