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

时间:2018-12-02 13:54:41

标签: javascript youtube-api youtube-javascript-api

从代码中删除此行后,浏览器冻结,怎么了?

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

代码最初写错了吗?

apiIsReady = true; 已删除

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

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

apiIsReady = true; 已添加

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果您删除Optional.ofNullable(key) .map(Person::get) // Optional<Person> .stream() // Stream<Person> .peek(this::printName) .peek(this::printAddress) ... ,则会创建一个无限循环。这就是为什么浏览器将冻结。