#javascript #google-chrome
Вопрос:
Код
var repro_bug = () => {
var state = { x: 1, y: 1 };
return () => {
var toggle = () => {
state.y = 1;
console.log(state.x);
};
// console.log();
state.x = state.y;
state.y = 0;
toggle();
};
};
var run = repro_bug();
Жук
Если вы звоните run()
, он всегда должен регистрироваться 1
. В Chrome 91.0.4472.114 (в Chrome OS 91.13904.0), когда я звоню run()
десять раз или около того, вместо этого он начинает регистрироваться 0
.
Странно, но если вы раскомментируете строку 11, пустую console.log
, она будет работать так, как ожидалось. Это наводит меня на мысль, что это ошибка в Chrome, потенциально связанная с каким-то невыполнением заказа. Этот пример является самым коротким, который я смог получить, toggle
для него необходимы отдельные функция и объект state
(вместо двух переменных), чтобы он вел себя странно.
Обратите внимание, что вам нужно выполнить окончательный run()
вариант вручную, как показано на скриншотах ниже, чтобы воспроизвести. Вероятно, это каким-то образом связано со временем.
Не может воспроизводиться в узле, а другой человек не может воспроизводиться в Firefox.
Скриншоты
Без комментариев (ожидаемое поведение):
Прокомментировал:
Комментарии:
1. Я сам его воспроизвел.
2. Просто тоже воспроизводится. Вот это забавно.
3. Воспроизводится с выводом журнала, завернутым в JSON.stringify. Теперь пытаюсь настроить утверждение здесь — и да, получил утверждение, не удалось после некоторого настойчивого нажатия на кнопку ввода. 🙂 Интересно, можно ли на это надавить в сценарии Selenium или что-то в этом роде.
4. Вероятно, вам следует просто отправить это как отчет об ошибке Chromium. Хотя это и интересно, на самом деле это не совсем подходит для ЭТОГО.