删除一行会导致浏览器冻结

Removing a line causes the browser to freeze

从代码中删除这一行后,浏览器冻结,怎么回事?

我该如何防止这种情况发生?

代码是否写错了,甚至可能首先发生?

apiIsReady = true; 已删除

尝试单击图像上的播放按钮,然后浏览器冻结。

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

apiIsReady = true; 已添加

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

没有 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)
    }
}

如果您删除 apiIsReady = true;,则会创建一个无限循环。这就是为什么浏览器会冻结。