Шаг 10.
Основы JavaScript.
Определение функций

    На этом шаге мы рассмотрим способы определения и вызова функций.

    В программировании часто бывает нужно одну и ту же группу команд повторять несколько раз. Если повторение происходит "на месте" - используются циклы (о них мы поговорим позже). Если код нужно повторять в разных местах программы - используются функции.

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

function ИмяФункции (список формальных аргументов, 
                 разделенных запятыми)
{
   .   .   .   .   .
   //Тело функции   
   .   .   .   .   .
   return значение;
}

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

    Операторы тела функции могут включать в себя вызовы других функций, определенных в текущем приложении. Различие между определением и вызовом функции традиционно для языков программирования. Определение функции просто называет функцию и задает выполняемые ею действия. Запрос функции исполняет указанные действия с фактическими параметрами. Желательно определять функции для страницы в разделе <HEAD> документа. В этом случае все функции будут определены прежде, чем будет загружено содержание документа. Иначе, в то время как страница еще не полностью загружена, пользователь может исполнить действие, которое вызывает функцию, работающую с еще не загруженным элементом страницы, что может привести к ошибке.

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

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

<HTML>
<HEAD>
<TITLE>Создание функций</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function abs(a)
{
  a = (a<0)?-a:a;
  return a;
}
var x = -2;
var y = abs(x);
alert ("Модуль числа "+x+" равен "+y);
//-->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
Текст этого документа можно взять здесь.

    Результат работы скрипта приведен на рисунке 1.


Рис.1. Использование функций

    Выполнение по шагам:

    Наибольший интерес в приведенном скрипте представляет строка a = (a<0)?-a:a;, которая содержит условную операцию. Эта операция содержит три операнда. Сначала вычисляется значение первого выражения, представляющего собой условие. Если значение отлично от нуля (истинно), то вычисляется значение второго выражения, которое и становится значением условной операции. В противном случае вычисляется значение третьего выражения, которое становится значением условной операции.

    При x=-2; условие a<0 истинно, поэтому условная операция в качестве своего значения возвращает значение выражения -a, которое затем возвращается из функции.


Проведите аналогичные рассуждения для неотрицательного значения переменной x.


    Отметим, что тело приведенного скрипта можно представить, объединив имеющиеся в нем конструкции:

    return a<0? -a:a;

    Команда вызова функции имеет следующий вид:

    ИмяФункции (список фактических аргументов, разделенных запятыми);

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

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

    void ИмяФункции (список фактических аргументов, разделенных запятыми);


    Замечание. Следует отметить, что void начал поддерживаться Internet Explorer только с версии 4.0 и Escape Navigator с версии 3.0.

    Перепишем последний скрипт, использовав в нем конструкцию void.

<HTML>
<HEAD>
<TITLE>Создание функций</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function abs(a)
{
  var b = a;
  a = (a<0)?-a:a;
  alert ("Модуль числа "+b+" равен "+a);
  //return a;
}
var x = -2;
void abs(x);
//-->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
Текст этого документа можно взять здесь.



    На следующем шаге мы рассмотрим правила передачи аргументов.




Предыдущий шаг Содержание Следующий шаг