[Смотрю я как-то на эту статью][learnjs] и даже как-то печально, что отсутствует объяснение на счет экзотического вызова функции [bind][bind].
Давайте я расскажу чем отличается обычный вызов функции от экзотического вызова функции [bind][bind].
Смотрите, у обычной функции, которую вы обычно определяете в своем коде, при ее создании создаются для нее специфические поля [[[Call]]][ordinary-call] (для любой функции) и [[[Construct]]][ordinary-construct] (только для обычных функций, функций-классов, функций созданных через конструктор Function). После создания, обычный вызов функции пользуется полем [[[Call]]][ordinary-call], при создании экземпляра используется [[[Construct]]][ordinary-construct].
- Вызов функции:
a();
- Создание экземпляра:
new a();
История с функцией, которая создает функцию [bind][bind] аналогичная, но есть одно но. Эта функция при создании определяет другое поведение для [[[Call]]][bind-call] и [[[Construct]]][bind-construct]. Но помимо этих пол