@OliveRrRrr

Почему теряется контекст в замыкании?

Добрый день. Подскажите, пожалуйста, почему теряется контекст в замыкании
export function addListeners() {
  const listeners = document.querySelectorAll('.route-box__input')
  listeners.forEach((item) =>
    item.addEventListener('input', debounce(requestInput, 5000))
  )
}

function debounce(func, delay) {
  console.log(this) //почему здесь this undefined?
  let timeout 
  return function () {
    console.log(this)   //здесь this сам элемент
    const context = this
    clearTimeout(timeout)
    timeout = setTimeout(function () {
      func.call(context)
    }, delay)
  }
}

async function requestInput() {
  const request = await ymaps.suggest(this.value)
  console.log(request)
}
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Не понятно что значит "теряется".
Какой контекст у функции, объявленной глобально? Window или с use strict - undefined.

А в функции которую она возвращает контекст равен элементу, потому что так работают обработчики событий. Т.к. эта функция вызывается не сразу, не в глобальном контексте, а в контексте элемента, ПОСЛЕ срабатывания клика.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы