我曾尝试使用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的对话框,因为a通过导入script2.js从5更改为6,但对话框显示5.我在这里缺少什么?
答案 0 :(得分:36)
在函数中使用var a
意味着a
将永远是私有的。自importScripts adds to the global scope起,JS更愿意访问发布a
的函数中更加本地化的a
。你可以发布self.a
,而不是你想象的那样。
编辑:有人最近亲自询问了我,所以我做了一个演示来澄清行为:http://pagedemos.com/importscript/