Функции JavaScript

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

Во-первых, это встроенные в среду исполнения возможности стандартных видов обработки. Во вторых – функции, заданные пользователем. В обоих случаях синтаксис обращения к функции одинаков.

Как правило, функции получают информацию в виде одного или нескольких аргументов, но их может и не быть. Функция обрабатывает информацию и, либо производит какие-то действия, либо возвращает результат своей работы, который можно оценить или поместить в переменную памяти.

Встроенные функции

Определение типа данных

Нередко возникает необходимость убедиться в том, что переменная (x в примерах) содержит необходимый тип данных.

Для этого есть встроенная функция typeof(), возвращающая строку с типом данных (всего их шесть).

If (typeof(x) != 'string')... //x не строка
If (typeof(x) != 'boolean')... //x не логического типа
If (typeof(x) != 'number')... //x не число
If (typeof(x) == 'undefined')... //x вообще не существует

Функции обработки строк

Для вызова строковых функций, необходимо обратиться к конструктору String. Здесь строка – имя переменной, содержащей строку, либо непосредственно строка, заключенная в кавычки.

Функция String.match()

Переоценить эту функцию невозможно, так как в ней совмещено огромное количество поисковых возможностей. Простейший пример: соответствует ли введенный текст адресу электронной почты.

Ищет соответствие строки маске, заданной регулярным выражением.

Если соответствие не найдено, возвращается null.

Если соответствие найдено, возвращается массив, содержащий информацию о найденном соответствии.

Синтаксис:

	строка.match(регулярное_выражение)

Функция String.parseInt()

Преобразует строку в целое десятичное число.

Синтаксис:

	parseInt(строка[, основание])

Необязательный аргумент основания представляет собой целое число от 2 до 36 и описывает основание системы счисления в которую переводится строка. Если аргумент опущен, то число будет десятичным (не совсем так, но...). Для нас представляет интерес 16-ричная система, так как она потребуется для работы с цветом.

Если строка не может быть преобразована, то будет возвращено значение NaN.

Функция String.replace()

Одна из важнейших функций в системе безопасности.

Синтаксис:

	строка.replace(регулярное_выражение, замена)

Функции обработки чисел

Здесь число – имя переменной, содержащей число, либо непосредственно число.

Математические функции

Среди условно числовых функций следует особо отметить математические, служащие для выполнения стандартной обработки.

Математические функции хранятся в объекте Math. Отсюда следует, что в JavaScript для обращения к ним в начало должен добавляться префикс «Math.».

Функции обработки дат и времени

Функция Date() возвращяет сегодняшнюю дату (точнее дату, установленную не компьютере).

	today = new Date();
	document.write('Сегодня: ' + today.toLocaleDateString());

Можно создать дату, используя конкретные числовые значения её элементов (г,м,д).

	var d = new Date(2006, 8, 21);

Нередко из даты надо «выковырять» год, месяц, день, день недели.

	d.getFullYear()	//Год в 4-значном формате
	d.getMonth()	//Номер месяца от 0 до 11
	d.getDay()	//День недели от 0 (вс.) до 6 (сб.)
	d.getHours()	//Час от 0 до 23
	...
	d.getTime()	//Переводит дату в миллисекунды, например, для сравнения дат
	d.setTime()	//Переводит миллисекунды в дату

Функции обработки массивов

Массив можно создать несколькими способами:

	var a = new Array()		//Создание пустого массива a
	var a = new Array(10)	//Создание массива a с 10 элементами (0-9)
	var b = [1, 'two', false]	//Создание массива b из 3 элементов разного типа

Подробнее о массивах см. здесь.

Функции, задаваемые пользователем

Пользовательские функции, помещаемые не в тело документа а в отдельный файл, должны содержать только текст на JavaScript.

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

Прежде чем создать свою функцию, нужно следующее.

  1. Понять, что она нужна! Эта проблема наиболее значима для начинающего программиста. Только определенный опыт позволяет во-время понять, что программировать задачу надо в виде функции, так как она будет использоваться много раз. Возможно, что её придется выполнять со множеством условий (передавая ей соответствующие аргументы).
  2. Принять решение о том, где она будет размещаться: в HTML-документе, текущей папке, специальной папке, в файле личной библиотеки самых нужных на свете программ.
  3. Продумать, как, для чего и почему может развиваться ваша идея.
  4. Разработать алгоритм работы программы и реализовать его в виде кода.

Создание функции

Теперь практическая сторона.

  1. Первая строка содержит слово function.
  2. После него через пробел указывается имя функции (соответствующее правилам и здравому смыслу)
  3. Затем – пара круглых скобок.
  4. Если функции передаются значения, то в скобках надо перечислить через запятую имена аргументов, которые будет использовать функция, чтобы различать значения.
  5. Далее, в фигурных скобках вводится программный код, являющийся собственно функцией.
  6. Результатом работы функции часто будет некое возвращаемое значение.

Аргументы

Если функции передаются аргументы, то их имена или значения записываются в скобках.

Обращение к функции (её вызов) с аргументами:

	x = my_func(a,b)	//функции переданы значения переменных a и b
	x = my_func(10,20)	//функции переданы два конкретных числа
		//В обоих случаях результа будет запомнен в переменной x

Сама функция, например, вернет произведение аргументов:

function my_func(m,n) {
	return m*n;
}

Если в предыдущем случае аргументы представляли собой новые переменные m и n, то в следующем примере они названы также – a и b.

function my_func(a,b) {
	return a*b;
}

Хочется напомнить и заострить внимание на том, что при выполнении функции будут сознаны новые (локальные) переменные a и b, то есть одновременно будут существовать a глобальная и a локальная. Последняя будет удалена из памяти после выполнения кода функции и её изменение никак не отразиться на глобальной «тезке».

Но что же будет, если забыть передать функции аргументы [my_func()], или передать только один [my_func(a)]?

Ответ прост: возникнет ошибка и программа работать не будет.

Но может быть еще хуже: функция вернет принципиально неправильный результат.

Для того, чтобы подобных неприятностей не возникало, требуется дополнительный анализ аргументов на факт их наличия и тип переданных данных.

При этом необходимо дополнительно учитывать, что аргументы подразделяются на обязательные и необязательные. Чтобы облегчить работу с ними, обязательные аргументы обычно приводят вначале, а необязательные – в конце.

При вызове функции создается объект arguments, отчасти похожий на массив, в связи с чем он имеет длину, то есть количество переданных аргументов (arguments.length). К элементам массива аргументов можно обратится по номеру: arguments[0] вернет значение первого аргумента, arguments[1] – втотого...

function my_func(a,b) {
if (arguments.length==0){document.write('Ошибка!');return false;}
		//Раз аргументов нет, то и работать функция не сможет
		//В данном случае она выведет в документ слово Ошибка! и возвратит ложь
		//это должно быть корректно обработано в самой программе
if (arguments.length==1){b=10;}
		//Второго аргумента нет
		//Решаем, что он не является обязательным и присваиваем b значение 10
	return a*b;
}

Да, но при использовании функции можно вместо числа передать любую белиберду.

function my_func(a,b) {
if (arguments.length==0){document.write('Ошибка!');return false;}
if (typeof(a) != 'number') {а=1};
		//Если передан не числовой тип, то присвоим переменной единицу
if (arguments.length==1){b=10;}
	return a*b;
}

Не очень умный вариант, так как функция без аргументов всегда вернет 1*10, но это только иллюстрирует другую возможность. Кроме того, нет проверки второго аргумента.

Изменим функцию, задав составное условие через логический оператор ИЛИ (||).

function my_func(a,b) {
if (arguments.length==1){b=10;}
if ((arguments.length==0) || typeof(a) != 'number') || typeof(b) != 'number')) {
	document.write('Ошибка!');
	return 'Ошибка!';
}
	return a*b;
}

Передав больше, чем 2 аргумента, мы ничего не добьемся, но и ничего не испортим, так как они не обрабатываются. Только сама функция перестанет работать, так как должна получать не более двух аргументов.

Возвращаемое значение

Функция может что-то делать (например, выводить на экран), но, в данном случае, речь идет о функции, обрабатывающей данные и возвращающей результат.

Наиболее правильным следует признать использование команды return, после которой записывается возвращаемое значение.

	if (x==0) {return true;}	//Если x = 0, возвратить истину,
	else {return false;}	//иначе – ложь

	return x;		//Возвратить значение переменной x

Пример разработки функции

Очень часто в нашей жизни происходит так называемое изобретение велосипеда. Это случается, когда мы не знаем, что это уже придумано и пытаемся сделать сами. Подобная работа крайне обидна, но очень помогает как развитию аналитических способностей, так и возникновению открытий: не факт, что до вас придумали идеально.

В нашем примере мы попробуем пройти наоборот – от знания к изобретательству. Попробуем написать функцию возведения числа в степень.

Тот кто занимался внимательно помнит, что для возведения числа в степень используется символ крышки (^). Тогда нечего и выдумывать: x^y и всё! Но в JavaScript этот символ имеет совершенно другой смысл, а для возведения в степень используется функция Math.pow().

Вроде и мудрить нечего, зато можно легко разобраться с формированием функции и использованием некоторых конструкций языка. Итак.

Проблема заключается в том, что квадрат и куб достаточно легко записать через умножение: x*x, x*x*x. Если же степень возрастает или не является целым числом (нам это пригодится), то в подобной записи могут легко возникнуть ошибки.

Для начала придумаем функции название. Самое разумное – использовать английские слова, заодно подтянув знания в этом языке. Степень по английски – degree.

Чтобы она работала, ей придется передать два числовых аргумента: основание и степень. Назовем их x и y. В функции нужно x умножить на себя y раз. Теперь можно составить программу.

function degree(x,y) {
	//Функция возведения в степень
	return Math.pow(x,y);
}

Готово! Если функция располагается в HTML-файле, её осталось вставить в контейнер <script>.

Для обращения к функции всегда будет использоваться один и тот же синтаксис. Например, нужно возвести значение переменной a в степень b и сохранить его в переменной c:

c = degree(a, b);

Замечание: функция должна быть описана в текущем файле, либо загружена в него.

x = , y =

Очевидно, что большинство захочет понавводить сюда чисел немыслимого значения.
Справка: Infinity – перебор; 1.56e+178 означает 1.56•10178 (научная запись чисел);
NaN – Not a Number.

Только смысла в нашей программе немного. Проще было использовать сразу встроенную функцию. Пропробуем сделать это вручную, назвав функцию degree1 и воспользовавшись предыдущими рассуждениями.

Итак, возьмем x и будем его умножать на себя же y раз. Мы уже неоднократно обсуждали цикл повторения, так что пока говорить не о чем. Постойте, а где хранить промежуточный результат? Естественно в переменной. Для этого воспользуемся именем degree1 (почему нет?).

function degree1(x,y) {
var degree1 = x;
for (i=2; i<=y; i++){
	degree1 = degree1 * x
}
return degree1;}

(Числа берутся из предыдущей формы.)

Для тех, кто дошел до этого места, можно предложить найти ошибки и противоречия в функции degree1.


Copyright © 1993–2020 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.