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

Rub*_*sch 23 javascript closures

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

var foo = 3;
this.method = function () { alert(foo); };
Run Code Online (Sandbox Code Playgroud)

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

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

Jak*_*kob 10

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

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


Sim*_*olm 9

从1.11.2开始,Firebug的命令行包含一个语法扩展,用于获取值foo:this.method.%foo.

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