importScripts (web workers)

importScripts (web workers)

本文关键字:workers web importScripts      更新时间:2023-09-26

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

在主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。我遗漏了什么?

在函数中使用var a意味着a将始终是私有的。由于importScripts添加到全局作用域,JS更倾向于在发布a的函数中访问更本地化的a。您可以发布self.a,它应该是6,正如您所期望的。

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