对于下面的 onload 2 函数(计划调用这 2 个图像的“onload”),如何保证其中一个在另一个开始之前完全完成?在这个单线程环境中是否有需要触发的回调的幕后队列?
如果entryFunction永远不会停止循环,它是否会暂停其线程并屈服于doWorks()之一?
我听说javascript不是多线程的,那么entryFunction()是否会屈服/暂停这些异步函数调用?
function entryFunction() {
var obj = new Image();
var obj2 = new Image();
// ...
obj.onload = function() { dowork(); }
obj2.onload = function() { dowork(); }
while (1) {
console.log("Actual work is being done");
}
}
function dowork() {
doThis();
doThat();
}
Run Code Online (Sandbox Code Playgroud)
你的代码永远不会离开while循环。因为 JavaScript 只有一个线程,所以您必须return从每个函数将控制权返回给环境。
在您的示例中,您的示例将导致您的浏览器在单独的线程中设置和下载图像(因为浏览器是多线程的)。下载图像后,环境将对 的调用进行排队onload()。这些将在您的 JavaScript 程序下次将控制权返回给环境时运行。
但由于您在循环中无限期地保持控制while,因此控制永远不会返回到环境,并且排队的事件永远不会运行。
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |