1 .作为浏览器的脚本语言。主要就是和用户互动以及操作dom,这决定了他只能是单线程,否则会带来很多的同步问题,可能会发生矛盾的操作。
2 .为了使用多核cpu的计算能力,h5提出web worker标准,允许js脚本创建多个线程,但是子线程完全受主线程控制,且不能操作dom
3 .异步事件:
1.所有任务都在主线程上执行,形成一个执行栈
2.主线程之外,还存在一个“任务队列”,只要异步任务有了运行结果,就在“任务队列”中放置一个事件。
3.一条“执行栈”中的所有同步任务执行完毕,系统就会读取“任务队列”,查询里面将要执行的事件,结束他的等待状态,进入执行栈,开始执行。
4 .对于dom改动,尤其是涉及页面重新渲染的部分,通常是不会立即执行的,而是每隔16ms就执行一次,这个时候使用requestAnimationFrame()就比setTimeout好。