在JS代码的执行过程中会分配两个内存区域——调用栈和堆。
第一个性能非常高,因此用于连续执行所提供的函数。每个函数调用在调用栈中创建一个所谓的“框架”,其中包含其局部变量的副本和this。
你可以通过Chrome调试器查看它,就像在其他与堆栈类似的数据结构中一样,调用栈的栈被推送或弹出堆栈,具体取决于正在执行或终止的新函数。
你可能见过调用栈上限溢出错误,通常是由于某种形式的无限循环导致的。
谈到堆,就像现实生活中一样,JS堆是存储本地范围之外对象的地方。它比调用栈慢得多。
这就是为什么访问本地变量时速度可能会快很多。堆也是存放未被访问或使用的对象的地方,这种对象就是垃圾。
有垃圾就要有垃圾回收器,需要时,JS运行时的垃圾回收器就会激活,清理堆并释放内存。