Вы наверняка неоднократно слышали термин “блок кода”. А знаете, что именно под ним подразумевают в программировании?

В сообществе JavaScript ответ довольно прост. И поскольку речь идет о JS, будем придерживаться следующего определения: все, что заключено в символе {}  —  это блок.

Теперь дадим ему имя.

Чем он стал? Объектом!

А что такое объекты? В отличие от других языков, где дается довольно смутное представление об объектах, в JS объект  —  это просто набор пар имя/значение (более изысканно выражаясь, ключ/значение).

Добавим к нему () =>.

Чем он стал?

Функцией!

А что такое функция? Это просто “блок с небольшим дополнительным механизмом, прикрепленным к нему. Мы можем вызвать (или инициировать ее), используя оператор группирования (), и она выполнит определенную задачу (или будет выполнена).

Функции фактически являются (специальными) объектами в JavaScript.

Вы можете легко добавить свойство к этой функции, используя точечную нотацию.

И это будет работать.

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

Почему JavaScript позволяет это делать? Потому что в нем функции  —  это объекты.

Имя функции и код, который пишется внутри блока,  —  всего лишь одно из свойств, добавленных к функции. Уникальность этого свойства заключается в том, что оно является инициируемым  —  вы можете вызвать (или выполнить) этот код.

Как вы знаете, функция может принимать входное значение и возвращать выходное, т.е. мы можем передавать значения (примитивы) функции.

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

А поскольку функции  —  это объекты, мы можем передавать функцию функции.

Такое понятие известно в JS как полноправная функция. И оно открывает горизонты для совершенно иных подходов к решению проблем.

Полноправные функции позволяют обращаться с функциями как с данными: присваивать их переменным, передавать другим функциям, возвращать их из функций, создавать функции “на лету” с помощью литерального синтаксиса и т.д.

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

Блоки, объекты и функции  —  это одно и то же (с небольшой разницей в механизме).

Как только вы полностью осознаете эту ментальную модель, она раз и навсегда изменит ваше отношение к коду JavaScript.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Somnath Singh: This Will (Forever) Change How You Look at Your Code

Предыдущая статьяСовместное использование кода в микросервисах и микрофронтендах: в чем разница
Следующая статьяGit: простое руководство о том, как стать мастером контроля версий