删除一行会导致浏览器冻结
Removing a line causes the browser to freeze
从代码中删除这一行后,浏览器冻结,怎么回事?
我该如何防止这种情况发生?
代码是否写错了,甚至可能首先发生?
apiIsReady = true;
已删除
尝试单击图像上的播放按钮,然后浏览器冻结。
https://jsfiddle.net/5umd9zfg/49/
apiIsReady = true;
已添加
没有 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;
,则会创建一个无限循环。这就是为什么浏览器会冻结。
从代码中删除这一行后,浏览器冻结,怎么回事?
我该如何防止这种情况发生?
代码是否写错了,甚至可能首先发生?
apiIsReady = true;
已删除
尝试单击图像上的播放按钮,然后浏览器冻结。
https://jsfiddle.net/5umd9zfg/49/
apiIsReady = true;
已添加
没有 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;
,则会创建一个无限循环。这就是为什么浏览器会冻结。