ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ

JS Учебник

JS Старт JS Интро JS Установка JS Вывод JS Инструкции JS Синтаксис JS Комментарии JS Переменные JS Ключевое слово Let JS Ключевое слово Const JS Операторы JS Арифметические JS Присваивание JS Типы данных JS Функции JS Объекты JS События JS Строки JS Строковые методы JS Строковый поиск JS Строковые шаблоны JS Числа JS Числовые методы JS Массивы JS Методы массива JS Сортировка массива JS Итерация массива JS Массив Const JS Даты JS Форматы дат JS Методы получения дат JS Методы установки дат JS Математические JS Рандомные JS Булевы JS Сравнения JS Условия JS Switch JS Цикл For JS Цикл For In JS Цикл For Of JS Цикл While JS Break и Continue JS Итерации JS Наборы JS Карты JS Typeof JS Преобразование типов JS Побитовые JS Регулярные выражения JS Ошибки JS Область действия JS Хостинг JS Use Strict JS Ключевое слово this JS Функция стрелки JS Классы JS JSON JS Отладка JS Гид по стилю JS Лучшие практики JS Распространенные ошибки JS Производительность JS Зарезервированные слова

JS Версии

JS Версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/Edge JS История

JS Объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Доступ к объектам Конструкторы объектов Прототипы объектов Итерируемые объекты Наборы объектов Карты объектов Справочник объектов

JS Функции

Определения функций Параметры функции Обращение к функции Вызов функции Применение функции Закрытие функции

JS Классы

Введение Наследование класса Статические методы

JS Асинхронный

Обратные вызовы Асинхронный Промисы Async/Await

JS HTML DOM

DOM Введение DOM Методы DOM Документ DOM Элементы DOM HTML DOM Формы DOM CSS DOM Анимация DOM События DOM Слушатель событий DOM Навигация DOM Узлы DOM Коллекции DOM Узловые списки

JS Браузер BOM

JS Окно JS Скрин JS Локация JS История JS Навигатор JS Всплывающее оповещение JS Тайминг JS Куки

JS Веб API

Веб API Интро Веб-формы API Веб-история API Веб-хранилище API Веб-воркер API Веб-выборка API Веб-геолокация API

JS AJAX

AJAX Интро AJAX XMLHttp AJAX Запрос AJAX Отклик AJAX XML Файл AJAX PHP AJAX ASP AJAX База данных AJAX Приложения AJAX Примеры

JS JSON

JSON Введение JSON Синтаксис JSON и XML JSON Типы данных JSON Анализ JSON Stringify JSON Объекты JSON Массивы JSON Сервер JSON PHP JSON HTML JSON JSONP

JS и jQuery

jQuery Селекторы jQuery HTML jQuery CSS jQuery DOM

JS Примеры

JS Примеры JS HTML DOM JS HTML Input JS HTML Объекты JS HTML События JS Браузер JS Редактор JS Упражнения JS Викторина JS Сертификат

JS Справочники

JavaScript Объекты HTML DOM Объекты

JavaScript. W3Schools на русском. Уроки для начинающих

En Ua

JavaScript Определения функций


JavaScript функции определяются с помощью ключевого слова function.

Вы можете использовать объявление или выражение функции.


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

Ранее в этом учебнике вы узнали, что функции объявляются со следующим синтаксисом:

function functionName(parameters) {
  // код для выполнения
}

Объявленные функции не выполняются сразу. Они "сохраняются для последующего использования" и будут выполнены позже, когда они будут вызваны (названы).

Пример

function myFunction(a, b) {
  return a * b;
}
Попробуйте сами »

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


Выражения функции

Функцию JavaScript также можно определить с помощью выражения.

Выражение функции может быть сохранено в переменной:

Пример

const x = function (a, b) {return a * b};
Попробуйте сами »

После того, как выражение функции было сохранено в переменной, переменную можно использовать как функцию:

Пример

const x = function (a, b) {return a * b};
let z = x(4, 3);
Попробуйте сами »

Вышеупомянутая функция на самом деле является анонимной функцией (функцией без имени).

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

Вышеупомянутая функция заканчивается точкой с запятой, потому что она является частью исполняемой инструкции.


Конструктор 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;
}

Функции, определенные с помощью выражения, не поднимаются.


Самовызывающиеся функции

Функциональные выражения могут быть "самовызывающимися".

Самозапускающееся выражение вызывается (запускается) автоматически, но не называется.

Функциональные выражения будут выполняться автоматически, если за выражением следует ().

Нельзя самостоятельно вызывать объявление функции.

Необходимо заключить функцию в круглые скобки, чтобы указать, что это выражение функции:

Пример

(function () {
  let x = "Hello!!";  // Я вызову себя
})();
Попробуйте сами »

Вышеупомянутая функция на самом деле является анонимной функцией с автоматическим запуском (функцией без имени).


Функции можно использовать как значения

Функции JavaScript могут использоваться как значения:

Пример

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3);
Попробуйте сами »

Функции JavaScript можно использовать в выражениях:

Пример

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3) * 2;
Попробуйте сами »

Функции и Объекты

Оператор typeof в JavaScript возвращает "function" для функций.

Но функции JavaScript лучше всего описывать как объекты.

JavaScript функции имеют как свойства, так и методы.

Свойство arguments.length возвращает количество аргументов, полученных при вызове функции:

Пример

function myFunction(a, b) {
  return 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 и фигурные скобки только в том случае, если функция является одной инструкцией. Из-за этого рекомендуется всегда иметь их:

Пример

const x = (x, y) => { return x * y };
Попробуйте сами »

Функции стрелки не поддерживаются в IE11 и более ранних версиях.