При попытке использовать в теле функции её аргумент, возникает ошибка 'имя_аргумента' is already defined. Почему?
Переношу JQueryInputMask из 7.2 в 7.6. Есть следующая функция:
var el = document.createElement("input"),
eventName = "on" + eventName,
isSupported = (eventName in el);
if (!isSupported) {
el.setAttribute(eventName, "return;");
isSupported = typeof el[eventName] === "function";
}
el = null;
return isSupported;
}
В 7.6 интерпретатор показывает ошибку 'eventName' is already defined на строке
Нравится
Евгений, данная ошибка возникает по причине использования формального параметра функции в блоке var. Таким образом интерпретатор считает, что Вы повторно пытаетесь объявить переменную с таким именем и подсказывает, что она уже объявлена.
Для устранения данного сообщения необходимо вынести присвоение из блока var:
[javascript]
var isInputEventSupported = function(eventName) {
eventName = "on" + eventName;
var el = document.createElement("input"),
isSupported = (eventName in el);
if (!isSupported) {
el.setAttribute(eventName, "return;");
isSupported = typeof el[eventName] === "function";
}
el = null;
return isSupported;
}
[/javascript]
При этом необходимо вынести присвоение до блока var, поскольку его результат используется в другом выражении этого блока.