00、头痛的JS闭包、词法作用域?
- 为什么有闭包这么个东西?闭包包的是什么?
- 什么是词法作用域?
- 函数是如执行的呢?
01、执行上下文 (execution context)
02、函数调用栈是干啥的?
:按变量被引用的次数,这个策略已不再使用了,由于该回收垃圾的策略太垃圾从而被抛弃了。
❓什么是可达性?
- 🔸根(roots):当前执行环境(window)最直接的变量,包括当前执行函数的局部变量、参数;当前函数调用链上的其他函数的变量、参数;全局变量。
- 🔸可达性(Reachability):如果一个值(对象)可以从根开始链式访问到他,就是可达的,就说明这个数据对象还有利用价值。
上图中FuncA
函数中的局部变量 obj1
,其值对象{P}
存放在内存堆中,此时的值对象{P}
被根变量obj1
引用了,是可达的。
- 如果函数执行完毕,函数就销毁了,变量引用
obj1
也一起随她而去。值对象{P}
就没有被引用了,就不可达了。 - 如果在函数中显示执行
obj1=null;
同样的值对象{P}
没有被引用了,就不可达了。
GC定期执行垃圾回收的两个步骤:
① 标记阶段:找到可达对象并标记,实际的算法会更加精细。
② 清除阶段:没有被标记的对象都会被清理删除。