2013-09-05 5 views
0

Какой я должен использовать, если бы мне пришлось его использовать?Какое из двух было бы самым эффективным способом сделать это?

  • С помощью метода 1 я создаю 1 функцию для каждой возможной комбинации комбинаций, но ее легко вызвать.
  • С методом 2 у меня есть только 1 функция, но сложнее позвонить.

Примечание: в реальном коде я не создаю все в глобальной области видимости, но идея остается прежней.

 //Method 1: 
     for(var key = 0 ; key < 1000 ; key++){ 
      for(var i = 0 ; i < 1000 ; i++){ 
       window[key + ' ' + i] = (function(key, i) { return function() { aFunction(key, i); } })(key, i) 
      } 
     } 

     //then I simply do 
     //window['223 111'](); 

 //Method 2: 
     for(var key = 0 ; key < 1000 ; key++){ 
      for(var i = 0 ; i < 1000 ; i++){ 
       window[key + ' ' + i] = ['aFunction',key,i] 
      } 
     } 
     //then i need to do 
     //window[window['223 111'][0]](window['223 111'][1],window['223 111'][2]); 
+0

Ваш вопрос относительно удобочитаемости или производительности? – Jordan

+5

Этот вопрос относится к обзору кода. – Jon

+0

Не могли бы вы дать нам некоторые подробности о том, почему вы хотите это сделать? В любом случае мне было бы гораздо лучше использовать свой собственный объект, а не «окно» для хранения всех этих переменных. Вы загрязняете глобальную область с 1000 переменными. – elclanrs

ответ

3

Go для ясности и простоты, если вы не имеете реальную проблему производительности.

я бы, вероятно, заменить первую версию с .bind()

for(var key = 0 ; key < 1000 ; key++){ 
    for(var i = 0 ; i < 1000 ; i++){ 
     window[key + ' ' + i] = aFunction.bind(window, key, i); 
    } 
} 

Не доступен в IE8 и ниже, но это может быть подкладками.


Кроме того, вы создаете немало глобальных переменных. Я бы предложил разместить их все в объекте пространства имен.

var NS = {} 

for(var key = 0 ; key < 1000 ; key++){ 
    for(var i = 0 ; i < 1000 ; i++){ 
     NS[key + ' ' + i] = aFunction.bind(window, key, i); 
    } 
} 

NS['223 111'](); 
+0

Заменил бы .bind() меньше памяти, чем метод 1? Или это просто делает код более понятным? – RainingChain

+0

@RainingChain: Меньший и понятный код. Я не знаю, что это займет меньше памяти (зависит от деталей реализации), но это, безусловно, не должно занимать больше. Прошло некоторое время с тех пор, как я прочитал спецификацию для '.bind()', но, похоже, я помню, что исходное тело функции разделяется между функциями, созданными из '.bind()', поэтому теоретически это должно быть меньше памяти. Раньше связанные функции были немного медленнее в исполнении, но опять же, прошло некоторое время с тех пор, как я его протестировал. В любом случае, это не будет заметно, если вы не вызываете функции много тысяч раз в секунду. – user2736012

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