Есть ли снижение производительности при написании функции, в которой локальные операторы 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
- все локальные переменные определены в одном месте
...и недостатки:
arguments
можно изменить неожиданным образом. Смотри ниже- менее ясно в теле, что вары являются локальными
- смущает видеть аргументы, которые ничего не делают
- если кто-то по незнанию удалит их, ваш код запишется в глобалы
Тем не менее, это может быть простой способ для минификатора автоматически выжимать больше битов.
Обновление: пока не упомянут большой недостаток: если функция вызывается с N параметрами, первые N элементов в arguments
будут привязаны к первым 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
перезаписала бы arguments[0]
и arguments[1]
соответственно.