Чистый код js работает в Firefox, но не в Chrome

Приведенный ниже код отлично работает в Firefox, в Chrome он ведет себя довольно странно. Для коротких петель (менее нескольких сотен) это работает, но для больших никогда не заканчивается. Иногда он может выйти из этого бесконечного цикла и завершиться.

Это можно исправить, заменив «delete _scope.context» на _scope.context=undefined.

Может кто-нибудь уточнить, что здесь происходит?

(function() {
  var _module = function() {
    const _scope = function() {
      var a = 0,
        block = 0;
      var suspend = function() {
        var context = {};
        context.a = a;
        context.block = block;
        context.resume = function() {
          _scope.context = context;
          return _scope();
        }
        _scope.context = context;
        return context;
      }
      var awake = function() {
        context = _scope.context;
        delete _scope.context;
        //_scope.context = undefined;
        a = context.a;
        block = context.block;
      }
      if (_scope.context !== undefined) {
        awake();
      }
      while (true) {
        switch (block) {
          case 0:
            block = 1;
            return suspend();
          case 1:
            block = 0;
            if (a++ > 10000) {
              return;
            }
            continue;
        }
      }
    }
    return _scope();
  }

  var runMod = function() {
    var susp = _module();
    var nSteps = 0;
    while (susp) {
      susp = susp.resume();
      if (!(++nSteps % 1000)) {
        console.log(nSteps, susp);
      }
      if (nSteps > 100000) {
        console.log('aborted')
        break;
      }
    }
    console.log('complete', nSteps);
  }

  runMod();
})()
.as-console-wrapper {
  max-height: 100% !important;
}

https://jsfiddle.net/daborkpw/

У меня вроде нормально работает? Возможно, вы все еще используете более старую версию Chrome.

yyny 22.05.2019 14:55

Я тоже на неактуальном хроме (74) и вижу разницу между двумя

OliverRadini 22.05.2019 15:01

Чтобы уточнить, я добавил вменяемую проверку, и программа останавливается после ненормального количества шагов. Если вы видите «прервано» в консоли, значит, что-то пошло не так

Tim P 22.05.2019 15:19

Я использую Chrome 74.0.3729.157, обновленный

Tim P 22.05.2019 15:27
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
1
4
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ошибка в Chrome, будет исправлена ​​в 75 Исправление https://chromium-review.googlesource.com/c/v8/v8/+/1617251/6/src/runtime/runtime-object.cc#84

Другие вопросы по теме