@McBernar

Почему код выполняется параллельно?

Привет.

Ребзя, вопрос.

Есть js-код (псевдо):

while (elem.opacity > 0) {
    elem.opacity -= .1;
}
elem.remove();

Все просто — изменяем прозрачность элемента DOM в цикле от 1 до 0 с шагом 0.1.
После этого удаляем элемент DOM.

Так вот вопрос — почему удаление происходит до того, как opacity стала равна 0?
Почему эти процессы происходят не последовательно, а параллельно? Ведь, по-идее, интерпретатор должен дождаться окончания работы цикла и только после продолжить выполнение кода, но на деле изменения opacity не видно, но видно, что элемент DOM удаляется сразу при загрузке.

Куда копать, чтобы понять суть происходящего?
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
В вашем случае, скорей всего, opacity меняется за тысячные доли секунды и срабатывает remove.
Демо.
Все шаги выполнения в консоли. На моей рабочей машине opacity меняется с 1 до 0 за 0.005 секунды. Представьте насколько это мало.
Код синхронный. Выполняться параллельно он не может.
Ответ написан
lidacriss
@lidacriss
wtf
есть подозрение, что у вас:
1. цикл даже не начинается, т.к. значение opacity изначально может быть "undefined"
и условие (undefined > 0) == false
2. цикл выполняется так быстро, что прозрачность выставляется в ноль быстро и сразу же удаляется элемент
3. еще следует значение opacity выставлять немного по-другому
elem.style.opacity
это, все-таки значение стиля
3.1. в этом случае, кстати, тоже по умолчанию значение может быть как пусто, если вы раньше его не присвоили каким либо образом, поэтому перед циклом скорее-всего надо бы делать типа elem.style.opacity=1;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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