@dron112

Почему присвоение переменной происходит раньше времени?

Я объявил флаг isOpenInputForSearch в положении fasle
После я делаю клик по элементу node, вызывается функция которая
- выводит в консоль isOpenInputForSearch ( он остаётся в положении fasle)
- на документ я вещаю addEventListener, в котором также делаю console.log(isOpenInputForSearch ),
но тут уже isOpenInputForSearch находиться в положении true, хотя в положение true я ставлю его ниже

Почему так происходит ?

let isOpenInputForSearch =  false

node.addEventListener('click', function(e) {

    console.log('1',  isOpenInputForSearch) // false - всё логично

     document.addEventListener('click', () => {
           console.log('2',  isOpenInputForSearch)  // true - почему ?
    });

    isOpenInputForSearch = true  // ведь меняю на true только тут
})
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Никакого "раньше времени", как написали, так и происходит:

  1. Добавили обработчик на document
  2. Изменили значение переменной
  3. Событие клика, случившееся на node, всплывает, попадает в свежедобавленный обработчик из п. 1, значение переменной уже новое, потому что п. 2


Если хотите иметь доступ к значению, которое было на момент назначения обработчика, привяжите его к обработчику с помощью bind:

document.addEventListener('click', ((val, e) => {
  console.log(val);
}).bind(null, isOpenInputForSearch));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 12:39
100000 руб./за проект
23 нояб. 2024, в 12:16
60000 руб./за проект
23 нояб. 2024, в 08:36
2000 руб./за проект