我们可以使用HTML5中的网络工作者:
var worker = new Worker('worker.js');
但是为什么我们不能调用这样的函数?
var worker = new Worker(function(){ //do something });
解决方法
这是网络工作者的设计方式。他们必须拥有自己的外部JS文件和由该文件初始化的自己的环境。他们不能与您的常规全球JS空间共享环境以实现多线程冲突的原因。
网络工作者不允许直接访问全局变量的一个原因是它需要两个环境之间的线程同步,这不是可用的(这会使事情变得严重)。当web worker有自己的单独的全局变量时,它们不能混淆主要的JS线程,除了通过与主JS线程正确同步的消息传递队列。
也许有一天,更高级的JS程序员将能够使用传统的线程同步技术来共享对常见变量的访问,但是现在所有两个线程之间的所有通信都必须通过消息队列,并且web worker不能访问主要的Javascript线程环境。