> For the complete documentation index, see [llms.txt](https://strctr.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strctr.gitbook.io/programming/01-languages/javascript/01-language/c-functions/c1-functions/06-callable-entities-es6.md).

# 06. Callable entities

В ES6 существуют следующие вызываемые сущности. Для всех них выражение `typeof` вернет строку `function`.

* **Традиционные функции**
  * В строгом режиме `this` равен `undefined`, а в нестрогом режиме - это глобальный объект.
* **Функции-генераторы**
  * Правила `this` как для обычной функции.
  * Функция генератор никогда не указывает на объект-генератора, которая она возвращает.
* **Arrow-функции**
  * Не имеют собственного контекста - все окружение получают *лексически* из родительского окружения.
  * Предпочитайте arrow-функции как функции обратного вызова.
  * Если arrow-функции используются как методы объекта, то такие функции по прежнему не будут иметь собственного `this`, а получат его правилам лексической области видимости.
* **Методы**
  * `this` хранит значение объекта, которому принадлежит данный метод.
  * Если функция-метод использует `super`, то она сохраняет привязку к своему окружению и `[[HomeObject]]`.
* **Методы-генераторы**
  * Методы генераторы ведут себя как генераторы (возвращают объект генератора), но помимо этого в них можно использовать `this` и `super`.
* **Классы**
  * `this` указывает на создаваемый объект.
  * Классы нельзя вызывать как функции, только как конструкторы.
  * Вызовы, включающие в себя `super` могут находиться только в двух местах в программе: вызов `super` через метод и вызов `super` в конструкторе.
* **Async-функции** - функции, оперирующие Promise.
