Есть ли снижение производительности при написании функции, в которой локальные операторы 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]
соответственно.