Что выведет код Senior this, call, apply, bind обновлено

Потеря this при деструктуризации

Вопрос

Что выведет код? По строке на каждый вывод.

const counter = {
  n: 5,
  get double() { return this.n * 2; },
  read() { return this.n; },
};
const { read, double } = counter;
console.log(double);
console.log(counter.read());
try { console.log(read()); } catch (e) { console.log(e.constructor.name); }

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 10, 5, TypeError. Почему так Деструктуризация вызывает геттер сразу и сохраняет значение.

Что выведет

10
5
TypeError

Разбор

Почему так

Деструктуризация вызывает геттер сразу и сохраняет значение. Метод же отрывается от объекта и теряет this. Поэтому методы из объектов и хуков либо не деструктурируют, либо заранее привязывают.

Вывод

10
5
TypeError

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.