Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Параметры функции (https://javascript.ru/forum/misc/76597-parametry-funkcii.html)

Wic_ 25.01.2019 10:10

Параметры функции
 
Здравствуйте! Делаю первые шаги, спрашиваю элементарное, в поиске не нашел (видимо неверно формулировал запрос).
Есть функция с двумя параметрами. Можно ли получить значение изменившегося параметра? Я, конечно, знаю что параметры преобразовываются в локальные переменные и недоступны вне функции, но для чего тогда используется переменная error? Пожалуйста, приведите примеры использования функции для проверки ИНН:
function validateInn(inn, error) {
	var result = false;
	if (typeof inn === 'number') {
		inn = inn.toString();
	} else if (typeof inn !== 'string') {
		inn = '';
	}
	if (!inn.length) {
		error.code = 1;
		error.message = 'ИНН пуст';
	} else if (/[^0-9]/.test(inn)) {
		error.code = 2;
		error.message = 'ИНН может состоять только из цифр';
	} else if ([10, 12].indexOf(inn.length) === -1) {
		error.code = 3;
		error.message = 'ИНН может состоять только из 10 или 12 цифр';
	} else {
		var checkDigit = function (inn, coefficients) {
			var n = 0;
			for (var i in coefficients) {
				n += coefficients[i] * inn[i];
			}
			return parseInt(n % 11 % 10);
		};
		switch (inn.length) {
			case 10:
				var n10 = checkDigit(inn, [2, 4, 10, 3, 5, 9, 4, 6, 8]);
				if (n10 === parseInt(inn[9])) {
					result = true;
				}
				break;
			case 12:
				var n11 = checkDigit(inn, [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
				var n12 = checkDigit(inn, [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
				if ((n11 === parseInt(inn[10])) && (n12 === parseInt(inn[11]))) {
					result = true;
				}
				break;
		}
		if (!result) {
			error.code = 4;
			error.message = 'Неправильное контрольное число';
		}
	}
	return result;
}

Wic_ 25.01.2019 10:28

Сейчас читаю об объекте Error, но все равно не понятно, как правильно использовать функцию.

laimas 25.01.2019 10:39

var error = {};
validateInn(тут проверяемое значение, а это ссылка на error)


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

Nexus 25.01.2019 10:44

Цитата:

Сообщение от laimas
Вот только какая-то бессмыслица получается, зачем же при проверке проверять все, а не прерывать ее при первой ошибке.

Скрипт осуществляет проверку до первой ошибки, а не все сразу.

laimas 25.01.2019 10:47

А да, виноват, там же только цифры )

Wic_ 25.01.2019 11:09

Спасибо! Нет ошибок?
function proverkaInn(IdElement)
  {
	 var elem = document.getElementById(IdElement);
	 var strINN = elem.value;
	 var error = {};
	 if (!validateInn(strINN, error)) {
        elem.style.border = '2px solid red';
        console.log(error.message);
     } else {
        elem.style.border = '2px solid black';
     }

  }

Что-консоль плагина Firebug Firefox у меня ни чего не показывает. А штатная консоль работает.

laimas 25.01.2019 11:28

Цитата:

Сообщение от Wic_
плагина Firebug Firefox

Не поддерживает лиса этот плагин уже давно, у нее теперь свой похожий, но более расширенный отладчик.

А не показывает потому, что функция validateInn(inn, error) возвращает не объект error, которого теперь для нее нет в глобальной области видимости, а result.


Часовой пояс GMT +3, время: 09:02.