Функции в 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) + ' наибольшее');
Локальные переменные
Функция может работать с глобальными
переменными и функциями, которые определены в основной программе. Также для функции можно определить локальные переменные и функции, которые будут видны только внутри данной функции. Переменные, указанные аргументами функции, являются ее локальными переменными.
При обращении к переменной или функции 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-ом.