线程与进程
进程是运行的程序,线程则是程序运行背后的 简单理解:进程>线程
为什么JS是单线程的?
chrome是windows中的一个进程,每个网页则是chrome中的子进程,而每个网页背后都配备一个JS引擎+页面渲染引擎的组合,因为只有一个JS引擎,所以是单线程的。
JS为什么可以渲染页面?
如果JS代码要渲染页面,则需要通过chrome提供的跨线程通信的方式去调用页面渲染引擎。
为什么Dom操作执行效率慢?
因为Dom操作不单单是JS内部的事情,需要动用到页面元素,代码渲染页面需要调用跨线程通信的方式,相当于跨部门合作,当然效率不高。
JS引擎主要功能
- 编译:把JS代码翻译成机器能执行的机器码
- 优化:改写代码使其更高效
- 执行:执行上述机器码
- 垃圾回收:把JS用完的内存回收
浏览器runtime env是什么
提供了一些api:window,document,setTimeout,navigator...
没错,这些都不属于JS自身的功能,这是浏览器的功能
Stack与Heap
- Stack与Heap中文翻译都可以叫堆栈,是两块不同区
- Stack区:数据顺序存放,用于存放非对象
- Heap区:数据随机存放,用于存放对象
对象与非对象
number string boolean除外的都是对象
以下代码是如何存放于Stack与Heap中的