是否保证JavaScript是单线程的?

众所周知,JavaScript在全部现代浏览器实现中都是单线程的,可是它是在任何标准中指定的,仍是仅是传统的? 假定JavaScript始终是单线程的,是否彻底安全? javascript


#1楼

是的,尽管使用诸如setInterval和xmlhttp回调之类的任何异步API时,您仍然会遇到一些并发编程问题(主要是竞争条件)。 java


#2楼

我会说是-由于若是浏览器的javascript引擎异步运行它,则几乎全部现有(至少全部不重要的)javascript代码都会中断。 程序员

此外, HTML5已经指定了将Web多线程引入基本Javascript中的Web Workers (用于多线程javascript代码的显式,标准化API)这一事实几乎没有意义。 编程

其余注解者注意:即便setTimeout/setInterval ,HTTP请求onload事件(XHR)和UI事件(单击,焦点等)提供了多线程的粗略印象-它们仍然都沿着单个时间轴执行-一次-所以,即便咱们事先不知道它们的执行顺序,也没必要担忧事件处理程序,定时函数或XHR回调的执行期间外部条件会发生变化。) 浏览器


#3楼

嗯,Chrome是多进程的,我认为每一个进程都处理本身的Javascript代码,但据代码所知,它是“单线程”。 安全

Javascript不支持多线程,至少没有明确支持,所以没有任何区别。 多线程


#4楼

是的,尽管Internet Explorer 9会在单独的线程上编译Javascript以准备在主线程上执行。 可是,这对于您做为程序员来讲并无任何改变。 并发


#5楼

JavaScript / ECMAScript旨在驻留在主机环境中。 也就是说,除非宿主环境决定解析并执行给定脚本,并提供使JavaScript实际上有用的环境对象(例如浏览器中的DOM),不然JavaScript实际上不会作任何事情异步

我认为给定的功能或脚本块将逐行执行,这对于JavaScript是有保证的。 可是,主机环境可能能够同时执行多个脚本。 或者,主机环境能够始终提供提供多线程的对象。 setTimeoutsetInterval是主机环境的示例,或者至少是伪示例,提供了进行某种并发(即便不是彻底并发)的方式。 函数