34

我尝试使用 importScripts 将第二个 JavaScript 文件加载到我的网络工作者中,但是虽然没有发生错误,但它没有工作。我将问题缩小到这个非常简单的情况:

在主 HTML 文件中:

<script>
var w = new Worker("script1.js");
w.addEventListener("message", function(e){
    alert(e.data);
})
w.postMessage();
</script>

在 script1.js 中:

self.addEventListener("message", function(e){
    var a = 5;
    importScripts("script2.js");
    self.postMessage(a);
})

在 script2.js 中:

a = 6

我希望看到一个显示 6 的对话框,因为通过导入 script2.js 将 a 从 5 更改为 6,但对话框显示 5。我在这里缺少什么?

4

1 回答 1

45

在函数中使用var a意味着a它将始终是私有的。由于importScripts 添加到全局范围,JS 更喜欢访问更本地化a的函数 post a。您可以self.a改为发布,如您所料,应为 6。

编辑:最近有人亲自问我这个问题,所以我做了一个演示来澄清行为: http: //pagedemos.com/importscript/

于 2013-04-30T23:51:04.740 回答