从代码中删除此行后,浏览器冻结,怎么了?
我将如何防止这种情况的发生?
代码最初写错了吗?
apiIsReady = true;
已删除
尝试单击图像上的播放按钮,浏览器将冻结。
https://jsfiddle.net/5umd9zfg/49/
apiIsReady = true;
已添加
答案 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)
...
,则会创建一个无限循环。这就是为什么浏览器将冻结。