【发布时间】:2014-05-05 13:20:59
【问题描述】:
我正在试图弄清楚闭包是如何在 JS 中实现的(理论上),但有一件事让我感到困惑,我找不到答案。
JS 中的闭包使用一个激活对象链。每个函数调用都有一个,它指向其父级的激活对象,后者指向其父级的激活对象,依此类推。
如果我理解正确的话,这种情况下的“父”是子函数在其中定义的函数调用。
但是孩子怎么知道它父母的激活对象呢?子函数可以在程序的任何地方调用,甚至在定义它的函数调用之外。定义函数时,父级的激活对象是否以某种方式存储在函数对象本身中?每个函数调用是否以某种方式从其自己的函数对象中获取其父级的激活对象?这是我能想到的唯一解释,但我无法验证。
另外,有没有办法检查激活对象(很像如何检查__proto__)?
【问题讨论】:
标签: javascript closures