考虑这个最小的可重现示例:
let src = 'https://fetch-progress.anthum.com/120kbps/images/sunrise-baseline.jpg';
let example = null;
function test(inSrc) {
let image = new Image();
image.onload = function () {
if (example.src === src) {
example = null;
}
}
image.src = inSrc;
return image;
}
example = test(src);
是否保证在将新图像对象分配给“example”后执行onload事件,因此,无论源大小如何,加载图像后,example将再次为空?或者onload可以在返回之前执行吗?
显然在我的所有测试中它总是在返回后运行,但我想确定它是否是 100% 保证的。我希望有一份解释其工作原理的参考资料。谢谢!
是的,这是保证的。浏览器触发的事件始终是异步的。 JavaScript 代码具有运行到完成的语义,在完成之前不会被中断。另请参阅这个答案了解更多详细信息(在nodejs中也是如此)。