JS中,带大括号的代码块中,唯有function(){}能创建作用域,这点与JAVA、C++等语言不一样。JS中的作用域只有两类:全局作用域与函数作用域。
浏览器在对代码进行解析时,会先进行变量声明和函数声明以及函数形参声明;所以就有了声明提前的说法。
JS最基础的GC方案比较简单:
- 遍历所有可访问对象
删除不可访问的对象
和其他语言一样,javascript的GC策略也无法避免一个问题:GC时,停止响应其他操作,这是为了安全考虑。而Javascript的GC在100ms甚至以上,对一般的应用还好,但对于JS游戏,动画对连贯性要求比较高的应用,就麻烦了。这就是新引擎需要优化的点:避免GC造成的长时间停止响应。
优化:
- 分代回收(Generation GC)
这个和Java回收策略思想是一致的。目的是通过区分“临时”与“持久”对象;多回收“临时对象”区(young generation),少回收“持久对象”区(tenured generation),减少每次需遍历的对象,从而减少每次GC的耗时。
- 增量GC
这个方案的思想很简单,就是“每次处理一点,下次再处理一点,如此类推”。