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