JavaScript入门③-函数(2)原理{深入}执行上下文-LMLPHP

00、头痛的JS闭包、词法作用域?

  • 为什么有闭包这么个东西?闭包包的是什么?
  • 什么是词法作用域?
  • 函数是如执行的呢?

JavaScript入门③-函数(2)原理{深入}执行上下文-LMLPHP


01、执行上下文 (execution context)

JavaScript入门③-函数(2)原理{深入}执行上下文-LMLPHP


02、函数调用栈是干啥的?

:按变量被引用的次数,这个策略已不再使用了,由于该回收垃圾的策略太垃圾从而被抛弃了。

❓什么是可达性?

  • 🔸根(roots):当前执行环境(window)最直接的变量,包括当前执行函数的局部变量、参数;当前函数调用链上的其他函数的变量、参数;全局变量。
  • 🔸可达性(Reachability):如果一个值(对象)可以从根开始链式访问到他,就是可达的,就说明这个数据对象还有利用价值。

JavaScript入门③-函数(2)原理{深入}执行上下文-LMLPHP

上图中FuncA函数中的局部变量 obj1,其值对象{P}存放在内存堆中,此时的值对象{P}被根变量obj1引用了,是可达的。

  • 如果函数执行完毕,函数就销毁了,变量引用obj1也一起随她而去。值对象{P}就没有被引用了,就不可达了。
  • 如果在函数中显示执行 obj1=null; 同样的值对象{P}没有被引用了,就不可达了。

JavaScript入门③-函数(2)原理{深入}执行上下文-LMLPHP

GC定期执行垃圾回收的两个步骤:

① 标记阶段:找到可达对象并标记,实际的算法会更加精细。

② 清除阶段:没有被标记的对象都会被清理删除。


12-03 10:09