本章阐释了JavaScript的单线程性为什么既是福利又是祸害。使用得当的话,它会使代码优美且没有那些多线程应用中泛滥成灾的可怕竞态条件。不过,这需要你形成正确的思维定势并掌握恰当的技术。 本书其余章节将介绍JavaScript中处理事件时用到的一些库和设计模式。我们考查的所有示例都可以运行于主流的浏览器或未经改动的Node.js环境。不过,编写JavaScript并不是产生JavaScript代码的唯一途径。关于其他一些有趣编辑器的概况,请参阅附录A。 这里值得提一下,JavaScript中存在一种多线程性:可以孵化出Worker进程。每个孵化出的进程都可以与其他进程交换数据,其限制等同于任何其他I/O进程。Worker对象使得我们有可能利用多个内核,同时不会破坏JavaScript的游戏规则(代码不可能被中断;变量只有处于其作用域内部时才是可访问的)。关于Worker对象的更多内容,请参见第5章。 接下来两章将专门讨论两种基本的设计模式。PubSub模式是一种将回调赋值给已命名事件的回调组织方式,而Promise对象是一种表示一次性事件的直观对象。