Д
Дэн Щербаков ⚛️
@code_lab89 подп.
240просмотров
21 апреля 2025 г.
questionScore: 264
❌ Спорим, не ответишь? function foo() { console.log( this.a ); } var a = 2; var o = { a: 3, foo: foo }; var p = { a: 4 }; o.foo(); // 3 (p.foo = o.foo)(); // что выведет в нестрогом режиме? Почему? Такие вопросы задают джуниорам, а все чаще и мидлам. Почему? На рынке 2025 требования выросли. От фронтов ждут знания языка на уровне, которого раньше ждали от бэкендеров в финтехе. Можешь с этим не соглашаться. Можешь возмущаться. Но правила диктует рынок. А теперь ответ: Выведет 2. Вот почему. Оператор присваивания, "=" возвращает ссылку на функцию в отрыве от контекста. Звучит непривычно, но да, он возвращает значения, как и оператор return. В коде "=" вернет ссылку на функцию foo, присвоенную объекту o. Отметь: ссылку на саму функцию, а не метод объекта с привязкой к контексту. По умолчанию функции привязывают свой this к глобальному объекту. Окруженный скобками, этот код позволяет на месте вызвать функцию. Объявленные в глобальном объекте переменные становятся его полями, доступными через точку. И мы получаем из глобального объекта 2. А в своем менторстве я учу понимать такие вопросы, вместо того чтобы заучивать ответы.
240
просмотров
1167
символов
Нет
эмодзи
Нет
медиа

Другие посты @code_lab

Все посты канала →
❌ Спорим, не ответишь? function foo() { console.log( this.a — @code_lab | PostSniper