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中的一个会很好,但我相信我们现在运气不好.
从1.11.2开始,Firebug的命令行包含一个语法扩展,用于获取值foo:this.method.%foo.
通过打开DOM面板中的"Show Closures"选项并展开"(closure)"伪属性,也可以检查整个闭包this.method.这也适用于Chrome(在那里调用伪属性<function scope>;没有pref).
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |