Удаление строки приводит к зависанию браузера - PullRequest
0 голосов
/ 02 декабря 2018

С удалением этой строки из кода браузер зависает, как получилось?

Как бы я мог предотвратить это?

Неправильно ли написан код, когда это вообще может произойти?

apiIsReady = true; Удалено

Попробуйте нажать на игруКнопка на изображении и браузер зависает.

https://jsfiddle.net/5umd9zfg/49/

apiIsReady = true; Добавлено

https://jsfiddle.net/5umd9zfg/30/

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Если вы удалите apiIsReady = true;, то это создаст бесконечный цикл.И поэтому браузер зависнет.

0 голосов
/ 02 декабря 2018

Если для apiIsReady не установлено значение true, вы создаете цикл, который добавляет новое значение в массив с каждой итерацией этого же массива.

function load_all_waitting_inits()
{
  for(var opts of waitting_inits) // new values are being added with each iteration, preventing loop to end
  {
    init(opts); // parse value of waitting_inits array
  }
}

function init(opts) {
    loadPlayer();
    if (apiIsReady) { // always false
      addVideo(opts.video, opts.playerVars || {});
    }
    else
    {
      waitting_inits.push(opts) // here you are adding values infinitely
    }
}

Редактировать

Проверить, содержит ли массив объект.

function init(opts) {
    loadPlayer();
    if (apiIsReady) {
      addVideo(opts.video, opts.playerVars || {});
    }
    else if(!waitting_inits.includes(opts)) // if array doesn't include opts then push
    {
      waitting_inits.push(opts)
    }
}
...