Функции представляют собой набор инструкций, которые можно повторно вызывать в различных частях программы по имени функции. В общем случае синтаксис определения функции выглядит следующим образом:
function имя_функции(параметры){ // Инструкции }
Определение функции начинается с ключевого слова function, после которого следует имя функции. Наименование функции подчиняется тем же правилам, что и наименование переменной: оно может содержать только цифры, буквы, символы подчеркивания и доллара ($) и должно начинаться с буквы, символа подчеркивания или доллара.
После имени функции в скобках идет перечисление параметров. Даже если параметров у функции нет, то просто идут пустые скобки. Затем в фигурных скобках идет тело функции, содержащее набор инструкций.
Определим простейшую функцию:
function hello(){ console.log("Hello Metanit.com"); }
Данная функция называется hello()
. Она не принимает никаких параметров и все, что она делает, это выводит на консоль браузера строку "Hello Metanit.com".
Чтобы функция выполнила свою работу, нам надо ее вызвать. Общий синтаксис вызова функции:
имя_функции(параметры)
При вызове после имени вызываемой функции в скобках указывается список параметров. Если функция не имеет параметров, то указывются пустые скобки.
Например, определим и вызовем простейшую функцию:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>METANIT.COM</title> </head> <body> <script> // определение функции function hello(){ console.log("Hello Metanit.com"); } // вызов функции hello(); </script> </body> </html>
В данном случае функция hello
не принимает параметров, поэтому при ее вызове указываются пустые скобки:
hello();
Отличительной чертой функций является то, что их можно многократно вызывать в различных местах программы:
// определение функции function hello(){ console.log("Hello Metanit.com"); } // вызов функции hello(); hello(); hello();
Подобно тому, как константам и переменным присваиваются простейшие значения (числа, строки и т.д.), также им можно присваивать функции. Затем через такую переменную или константу можно вызвать присвоенную ей функцию:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>METANIT.COM</title> </head> <body> <script> // определение функции function hello(){ console.log("Hello from Metanit.com"); } // передача константе message ссылки на функцию hello const message = hello; message(); // вызываем функцию, ссылка на которую хранится в константе message </script> </body> </html>
Присвоив константе или переменной функцию:
const message = hello;
затем мы можем по имени константы/переменной вызывать эту функцию:
message();
Также мы можем динамически менять функции, которые хранятся в переменной:
function goodMorning(){ console.log("Доброе утро"); } function goodEvening(){ console.log("Добрый вечер"); } let message = goodMorning; // присваиваем переменной message функцию goodMorning message(); // Доброе утро message = goodEvening; // меняем функцию в переменной message message(); // Добрый вечер
Необязательно давать функциям определенное имя. Можно использовать анонимные функции. Такие функции при определении присваиваются константе или переменной. Эти функции еще называют функции-выражения (function expression):
const message = function(){ console.log("Hello JavaScript"); } message();
Используя имя константы или переменной, которой присвоена функция, можно вызывать эту функцию.
JavaScript позволяет определять локальные функции - функции внутри других функций. Локальные функции видно только в рамках внешней функции, в которой они определены. Например:
function print(){ printHello(); printHello(); printHello(); function printHello(){ console.log("Hello"); } } print(); printHello(); // Uncaught ReferenceError: printHello is not defined - локальную функцию можно вызвать только из ее окружающей функции
Здесь внутри функции print определена локальная функция printHello, которая просто выводит строку "Hello". И внутри функции print мы можем вызвать локальную функцию printHello, однако вне окружающей функции локальную функцию вызвать нельзя.
Данный пример довольно простой и не имеет большого смысла. Однако, как правило, локальные функции определяются для таких действий, которые применяются многократно только в рамках какой-то одной функции и больше нигде. К минусам локальных функции можно отнести то, что они создаются всякий раз, когда происходит вызов внешней функции.