1. JS变量查找
var name = "hgf"
foo(123)
function foo(num) {
console.log(m)
var m = 10
var n = 20
console.log(name) //hgf
}
js查找变量时,真实查找路径是沿着作用域链查找 scope chain: VO + ParentScope
2. js的内存管理
基本数据类型的内存分配由栈空间进行分配
复杂数据类型如数组,对象等的内存分配由堆空间通过指针返回值变量引用
3. js的内存回收方式
s通过GC算法-垃圾回收机制-引用标记回收内存
常见GC算法:
①引用计数:被引用时通过计数变量记录,待引用计数变量为0时,回收内存空间 存在弊端 循环引用
②标记清除:这个算法是一个根对象,垃圾回收器会定期从这个根开始,找所有从根开始有引用到的对象,对哪些没有引用到的对象,就认为是不可用对象;
这个算法可以解决循环引用的问题
JS引擎比较广泛的采用的就是标记清除法,类似V8引擎为了更好的进行优化,在它算法实现细节上会结合一些其他的算法。