Функции
Чтобы не повторять один и тот же код во многих местах, придуманы функции. Функции являются основными «строительными блоками» программы.
*DRY – Don't Repeat Yourself (Не повторяй себя)*
Пример объявления функции:
Возвращаемое значение
Мы можем воспринимать функцию как некоторую фабрику которая что-то получает и выдает какой-то результат своей работы.
Чтобы вернуть результат из функции используется оператор return.
Важно заметить, что вернуть результат из функции вы можете только один раз.
Вызов функции является выражением, Т.е имеет значение... это значение можно присвоить в переменную
Всплытие функций (hoisting)
Более детально мы будем обсуждать функции потом, справка будет расширена. Но пока можно обратить внимание на этот пример:
Следует быть аккуратными с подобными эффектами, многие считают такое поведение опасным, поэтому следует сначала объявить функцию, а потом только вызывать ее.
Рекурсия
С рекурсией все просто... это возможность из функции foo вызывать саму себя функцию foo.
Напишем рекурсивную функцию, которая будет выводить в консоль числа от 0 до 100:
*Стоит заметить, что этот пример сложнее чем использование циклов, сделан от только для примера*
Живой пример
Рекурсия / Введение в программирование, урок 8 (JavaScript ES6)
Объявление Function Expression
Существует альтернативный синтаксис для объявления функции, который ещё более наглядно показывает, что функция – это всего лишь разновидность значения переменной.
Мы в переменную foo присваиваем функцию... в дальнейшем мы поймем, что это приводит нас к тому, что функции в JS это элементы первого порядка.
Анонимная функция – функция у которой нет собственного имени, в примере ниже, вы можете сказать, что функция имеет имя foo. Но это не совсем так, в переменной лежит анонимная функция.
*Смотря на пример выше мы должны вспомнить про всплытие переменных и функций*
Самовызывающиеся функции
Мы с вами уже увидели, что объявление функции может являться выражением. Выражения можно заключать в круглые скобки (Пример: (10 + 3) * 2). Давайте сделаем так: (function (){...})().
Что за ужас мы сделали?
Мы объявили функцию в круглых скобках, потом из круглых скобок мы ее получили и вызвали. Т.к функции имеют свою область видимости переменных таким образом мы можем изолировать какие-то переменные в нашем модуле.
Callback function и передача функции как аргумент
Выше уже говорилось о том, что функции являются элементами первого класса, в первую очередь это обозначает, что функции можно передавать как аргументы в другие функции или методы. Результатом работы одной функции может быть другая функция.
Замыкания
Замыкания многих пугают в этом языке... хотя они существуют и в других языках тоже. Замыкание – это возможность запоминать контекст при котором была создана функция. После создания функция имеет доступ к переменным которые были доступны на момент создания.
Для наглядность давайте еще попробуем написать функцию-счетчик
Псевдомассив аргументов "arguments"
warning
TODO: Дописать
Живой пример с счетчиком