Skip to content

Instantly share code, notes, and snippets.

@dSalieri
dSalieri / index.md
Last active March 14, 2024 20:11
Promise изнутри

Автор: dSalieri

Версия ECMAScript, используемая в объяснении: Draft ECMA-262 / June 24, 2022

Версия WHATWG, используемая в объяснении: Living Standard - 22 August 2022

Последнее изменение документа: 13.12.2022


@dSalieri
dSalieri / index.md
Last active April 18, 2023 06:44
Как представлен bind-метод / примерная реализация метода bind

[Смотрю я как-то на эту статью][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]. Но помимо этих пол