При попытке использовать в теле функции её аргумент, возникает ошибка 'имя_аргумента' is already defined. Почему?

Переношу JQueryInputMask из 7.2 в 7.6. Есть следующая функция:

var isInputEventSupported = function(eventName) {
                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 на строке

eventName = "on" + eventName,
Скажите, пожалуйста, что нужно сделать для исправления этой ошибки ?

Нравится

1 комментарий

Евгений, данная ошибка возникает по причине использования формального параметра функции в блоке var. Таким образом интерпретатор считает, что Вы повторно пытаетесь объявить переменную с таким именем и подсказывает, что она уже объявлена.

Для устранения данного сообщения необходимо вынести присвоение из блока var:

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;
}

При этом необходимо вынести присвоение до блока var, поскольку его результат используется в другом выражении этого блока.

Показать все комментарии