Функции в JavaScript

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

Объявление функции

Function Declaration

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

function funcName(arg_1, arg_2, ...) {
  /* тело функции */
}

Общий вид вызова функции:

funcName(par_1, par_2, ...);

Задаётся функция ключевым словом function. Далее идет имя функции, по которому происходит её вызов. В скобках указываются аргументы, в которые записываются данные из переданных при вызове функции параметров. Пример:

function showMax(first, second) {
  if (first > second) {
    alert(first);
  } else {
    alert(second);
  }
}

showMax(2, 4); // 4
showMax(5, 3); // 5

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

function showMax(first, second) {
  if (second === undefined) {
    second = 0;
  }
  if (first > second) {
    alert(first);
  } else {
    alert(second);
  }
}

showMax(2, 4); // 4
showMax(-5); // 0

В примере выше аргумент second указывать не обязательно, и тогда ему будет присвоено значение по умолчанию 0.

Function Expression

Function Expression - объявление функции в общем потоке скрипта. Общий вид задания функции:

var funcName = function(arg_1, arg_2, ...) {
  /* тело функции */
};

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

function removeFile(remove, safe) {
  var answer = confirm('Удалить файл?') ? remove : safe;
  answer();
}

removeFile(function() {alert('Файл удален');}, function() {alert('Файл спасен');});

В данном примере в качестве параметров функции передаются анонимные функции и записываются в переменные remove и safe. Далее в зависимости от ответа в переменную answer записывается нужная функция и выполняется.

Конструкция new Function()

Конструкция new Function() позволяет создавать функцию из строки. Общий вид:

var funcName = new Function('arg_1, arg_2, ...', '... // тело функции');

Первая строка содержит список аргументов. Вторая строка содержит тело функции. Пример:

var findMax = new Function('first, second', 'return (first > second) ? first : second;');
alert(findMax(3, 8) + ' наибольшее');

Подробное описание объекта Function.

Локальные переменные

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

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

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

Директива return

Чаще всего функции используются для получения конкретного результата (правильно ли введен пароль, является ли строка email-ом, результат сложного математического выражения) для использования дальше в основном скрипте. Чтобы получить результат от функции, используется директива return. В функции можно использовать несколько директив return.

function findMax(first, second) {
  if (first > second) {
    return first;
  } else {
    return second;
  }
}

alert('Число ' + findMax(2, 4) + ' наибольшее');

Работа функции завершается при первом выполненном return. Эту директиву можно использовать без аргумента. При этом вернется значение undefined. Одиночный return обычно используется для принудительного прекращения выполнения функции.

Имена функций

Требования к имени функции такие же, как для переменных.

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

  • showTable - показать таблицу.
  • getValue - получить значение.
  • findRow - найти строку.
  • isEmail - является ли строка email-ом.