我试图理解这个例子:
HTML(主要代码):
<html>
<title>Test threads fibonacci</title>
<body>
<div id="result"></div>
<script language="javascript">
var worker = new Worker("fibonacci.js");
worker.onmessage = function(event) {
document.getElementById("result").textContent = event.data;
dump("Got: " + event.data + "\n");
};
worker.onerror = function(error) {
dump("Worker error: " + error.message + "\n");
throw error;
};
worker.postMessage("5");
</script>
</body>
</html>
Javascript(工作代码):
var results = [];
function resultReceiver(event) {
results.push(parseInt(event.data));
if (results.length == 2) {
postMessage(results[0] + results[1]);
}
}
function errorReceiver(event) {
throw event.data;
}
onmessage = function(event) {
var n = parseInt(event.data);
if (n == 0 || n == 1) {
postMessage(n);
return;
}
for (var i = 1; i <= 2; i++) {
var worker = new Worker("fibonacci.js");
worker.onmessage = resultReceiver;
worker.onerror = errorReceiver;
worker.postMessage(n - i);
}
};
我有以下问题:
工人代码何时开始运行?执行后立即
var worker = new Worker("fibonacci.js");
?onmessage = function(event) { ... }
工作代码中的分配将worker.postMessage("5");
在主代码之前执行,这是真的吗?工作代码可以访问在主代码中定义的全局变量(如
worker
)吗?主代码可以访问工作代码中定义的全局变量(如
results
)吗?在我看来,
worker.onmessage = function(event) {...}
主代码中的含义onmessage = function(event) {...}
与工作代码(工作人员的onmessage
事件处理程序)中的含义相同。我哪里错了?它们之间有什么区别?这段代码实际上应该做什么?当我在这里运行它时,它只打印“5”。这是它应该做的,还是我错过了什么?
非常感谢 !