如何在javascript中检查绑定的闭包变量?

时间:2011-01-31 09:40:11

标签: javascript closures

假设我们做了类似的事情(作为构建Javascript对象的一部分):

var foo = 3;
this.method = function () { alert(foo); };

现在会生成一个闭包,以确保foo保留并可在method中使用。有没有办法对当前的闭包进行内省?

我正在寻找的是一种枚举method中可用的所有变量的方法,其中应包括foo。像这样的调试代码将极大地帮助调试闭包的绑定,但我还没有找到它。有可能这样做吗?

3 个答案:

答案 0 :(得分:10)

语言本身不包含这种可能性。事实上,隐藏在JavaScript闭包中的数据是少数实际上真正私有的东西之一(与C#,C ++,Java等中的“私有”数据相反,它总是可以通过指针魔法或反射来访问)。

简而言之,这将是一个编译器级别的事情。你可以期待的是一个内置于主要JavaScript解释器之一的工具(或者至少是将这样的工具插入核心引擎的内置功能)。 Firefox / Firebug或V8 / Node.js中的一个会很好,但我相信我们现在运气不好。

答案 1 :(得分:8)

自1.11.2起,Firebug的命令行包含一个语法扩展,用于获取foothis.method.%foo的值。

通过打开DOM面板中的“Show Closures”选项并展开this.method的“(闭包)”伪属性,也可以检查整个闭包。这也适用于Chrome(伪属性称为<function scope>;没有pref)。

答案 2 :(得分:-1)

也许JavaScript没有默认实现它,但我可以想象一种方法从全局Object读取所有属性(因为foo是它的属性)并读取每个属性直到关闭,虽然这将是真的慢。我必须说我不太了解javascript,也许我只是说非常规,但也许你从我的方法中得到了一个新的想法。