[译]FireClosure – JavaScript闭包检查器

原文:https://blog.getfirebug.com/2012/11/07/fireclosure-javascript-closure-inspector/


FireClosure是一个值得关注的Firebug扩展.它能很好的集成到Firebug目前的UI中(实际上我们正在考虑是否要把该扩展内置到Firebug中),它的作用是用来查看(Inspector)JavaScript中的闭包.

该扩展的作者是 Simon Lindholm.(译者注:非知名人士,这是他AMO上唯一的一个扩展)

例子

首先,让我们看一个简单的例子:

var PersonFactory = function(name, age)
{
    return {
        getName: function() { return name; },
        getAge: function() { return age; },
    };
};

var person = PersonFactory("Bob", 58);

现在,假如我们需要"检查"(inspect)person这个对象,但该操作并不是那么简单,因为该对象实际上没有任何属性.只有两个函数类型的属性使用到了闭包,通过闭包能够访问到传给PersonFactory函数的变量(参数name和age).

所以,我们不能在Firebug的命令行下执行下面的表达式:

person.name //无法获取到name属性

可是,如果你安装了FireClosure,你可以使用下面的语法:

person.%name

另外,FireClosure也集成到了DOM面板中,查看下面的截图

多出了一个新的区域"作用域变量"(scoped variables),显示出了闭包中的所有局部变量.
 
你还可以使用Watch侧边栏来检查(inspect)闭包.


 

注意

  • Firefox经常会优化掉一些闭包和变量.在调试的时候,你可以故意在相关代码周围临时添加一些无意义的eval语句,来防止这种优化(当然代码的性能会降低).(译者注:eval和with都会影响性能,随着JIT的引入,这种性能差异应该会越来越大)
  • 一些对象可能有些意外的作用域.这是因为非函数(non-function)的对象并没有真正的作用域,这种功能是通过它的函数类型的属性来实现的.

反馈

我们非常希望得到关于该功能的反馈,请告诉我们你的想法.

  • 关于该功能,我们还能做哪些改进?
  • 你喜欢该功能目前的语法吗 .%?
  • 我们应该把该功能集成到Firebug中吗?

请到讨论组中提交反馈,谢谢!

Jan 'Honza' Odvarko (译者注:他是Firebug的作者,目前自由职业,全职开发Firebug)

posted @ 2012-11-08 13:39  紫云飞  阅读(1335)  评论(0编辑  收藏  举报