Есть ли снижение производительности при замене локальных переменных аргументами в Javascript?

Есть ли снижение производительности при написании функции, в которой локальные операторы var заменяются аргументами? Пример:

function howManyMatch(arr, pattern, /*ignored:*/ i, l, total) {
  l = arr.length;
  total = 0;
  for (i = 0, i < l; i++) {
    if (pattern.test(arr[i]))
      total++;
  return total;
}

Некоторые преимущества:

  • меньший минимальный размер: нет операторов var ;
  • меньше времени программиста, затрачиваемого на попытки использовать как можно меньше var s
  • все локальные переменные определены в одном месте

... и недостатки:

  • аргументы могут быть изменены неожиданным образом. См. Ниже
  • менее ясно, что переменные являются локальными
  • , что сбивает с толку, чтобы увидеть аргументы, которые ничего не делают
  • , если кто-то неосознанно удаляет их, ваш код записывает в глобальные переменные

Тем не менее, это может быть простой способ для минификатора для автоматического сжатия большего количества битов.

Обновление: большой недостаток, о котором пока не упоминалось: если функция вызывается с N параметрами, первые N элементов в аргументах будут связаны с первыми N идентификаторами в списке аргументов (см. последний пункт в 10.1.8 ). Рассмотрим следующее:

function processStuff(/*ignored:*/i, j, k) {
    // use i/j/k to loop
    // do stuff with the arguments pseudo-array
}

В приведенном выше примере, если вы вызвали processStuff (stuff1, stuff2) , установка i и j перезапишет аргументы [ 0] и аргументы [1] соответственно.

6
задан Steve Clay 8 December 2010 в 16:49
поделиться