JavaScript Определения функций
JavaScript функции определяются с помощью ключевого слова function
.
Вы можете использовать объявление или выражение функции.
Объявления функций
Ранее в этом учебнике вы узнали, что функции объявляются со следующим синтаксисом:
function functionName(parameters) {
// код для выполнения
}
Объявленные функции не выполняются сразу. Они "сохраняются для последующего использования" и будут выполнены позже, когда они будут вызваны (названы).
Точки с запятой используются для разделения исполняемых операторов JavaScript.
Поскольку объявление функции не является исполняемым оператором, не принято заканчивать его точкой с запятой.
Выражения функции
Функцию JavaScript также можно определить с помощью выражения.
Выражение функции может быть сохранено в переменной:
После того, как выражение функции было сохранено в переменной, переменную можно использовать как функцию:
Вышеупомянутая функция на самом деле является анонимной функцией (функцией без имени).
Функции, хранящиеся в переменных, не нуждаются в именах функций. Они всегда вызываются (называются) с использованием имени переменной.
Вышеупомянутая функция заканчивается точкой с запятой, потому что она является частью исполняемой инструкции.
Конструктор Function()
Как вы видели в предыдущих примерах, функции JavaScript определяются с помощью ключевого слова function
.
Функции также могут быть определены с помощью встроенного конструктора функций JavaScript, называемого Function()
.
Пример
const myFunction = new Function("a", "b", "return a * b");
let x = myFunction(4, 3);
Попробуйте сами »
На самом деле вам не нужно использовать конструктор функции. Приведенный выше пример аналогичен написанию:
Пример
const myFunction = function (a, b) {return a * b};
let x = myFunction(4, 3);
Попробуйте сами »
В большинстве случаев вы можете избегать использования ключевого слова new
в JavaScript.
Подъем (хостинг) функций
Ранее в этом учебнике вы узнали о "поъёме" (глава JavaScript Подъём).
Подъем - это стандартное поведение JavaScript, заключающееся в перемещении объявлений в верхнюю часть текущей области.
Подъем применяется к объявлениям переменных и объявлениям функций.
Из-за этого функции JavaScript можно вызывать до их объявления:
myFunction(5);
function myFunction(y) {
return y * y;
}
Функции, определенные с помощью выражения, не поднимаются.
Самовызывающиеся функции
Функциональные выражения могут быть "самовызывающимися".
Самозапускающееся выражение вызывается (запускается) автоматически, но не называется.
Функциональные выражения будут выполняться автоматически, если за выражением следует ().
Нельзя самостоятельно вызывать объявление функции.
Необходимо заключить функцию в круглые скобки, чтобы указать, что это выражение функции:
Вышеупомянутая функция на самом деле является анонимной функцией с автоматическим запуском (функцией без имени).
Функции можно использовать как значения
Функции JavaScript могут использоваться как значения:
Функции JavaScript можно использовать в выражениях:
Функции и Объекты
Оператор typeof
в JavaScript возвращает "function" для функций.
Но функции JavaScript лучше всего описывать как объекты.
JavaScript функции имеют как свойства, так и методы.
Свойство arguments.length
возвращает количество аргументов, полученных при вызове функции:
Метод toString()
возвращает функцию в виде строки:
Пример
function myFunction(a, b) {
return a * b;
}
let text = myFunction.toString();
Попробуйте сами »
Функция, определенная как свойство объекта, называется методом объекта.
Функция, предназначенная для создания новых объектов, называется конструктором объекта.
Функции стрелки
Функции стрелки позволяют использовать короткий синтаксис для написания выражений функции.
Нет необходимости в ключевом слове function
, ключевом слове return
и фигурных скобках.
Пример
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
Попробуйте сами »
У функций стрелки нет собственного this
. Они не подходят для определения методов объекта.
Функции стрелки не поднимаются. Они должны быть определены до их использования.
Использование const
безопаснее, чем использование var
, потому что выражение функции всегда является постоянным значением.
Вы можете опустить ключевое слово return
и фигурные скобки только в том случае, если функция является одной инструкцией. Из-за этого рекомендуется всегда иметь их:
Функции стрелки не поддерживаются в IE11 и более ранних версиях.