Я бы не стал этого делать по многим причинам, которые вы уже знаете, лично мне не нравится факт смешивания семантического значения аргументов и переменных, хотя на уровне реализации, когда функция выполняется, это просто свойства текущего объекта переменной, они имеют разное значение IMO.
Теперь, отвечая на вопрос, Я не думаю, что это повлияет на производительность .
Позвольте мне немного поговорить о процессе создания переменной , он происходит для кода функции, непосредственно перед выполнением функции (обычно известной как «подъем»), во-первых, все Формальные параметры , описанные для функции, привязаны к текущему объекту переменной (текущей области), и они инициализируются значениями, переданными в вызове функции, или undefined
, если не предоставлено.
После этого все идентификаторы, принадлежащие всем операторам var
в функции, объявляются в текущей области и инициализируются с помощью undefined
(обратите внимание, что назначения выполняются после этого, тело функции фактически не является выполняется еще).
Третий шаг - FunctionDeclarations, все идентификаторы объявлений функций привязаны к локальной области, если идентификатор был ранее объявлен, его значение заменяется, например:
(function (a) {
return typeof a; // "function", not "string"
function a () {}
})('foo'); // <-- passing a string
Я бы рекомендовал вместо этого просто использовать один оператор var
в верхней части функции:
function howManyMatch(arr, pattern) {
var l = arr.length,
total = 0, i;
for (i = 0, i < l; i++) {
if pattern.test(arr[i]) && total++;
return total;
}
Это не просто организует ваш код, это поможет вам предотвратить нежелательные результаты из-за функциональности JavaScript и «подъемной» природы var
, некоторые инструменты, такие как JSLint, поощряют это тоже.