是否可以迭代JavaScript闭包中的所有属性?

时间:2011-08-03 17:44:32

标签: javascript closures

for ( var i in this ) { console.log(i); }

通过这个循环,我迭代了对象的所有属性。是否有可能找到存在的local / closure变量?

1 个答案:

答案 0 :(得分:3)

不,没有办法检查作用域的内容,因为没有办法获得它的句柄。 (全局范围是例外,因为有办法解决它。)

我的意思是,没有办法让运行时为您提供对范围的引用,就好像它是一个JavaScript对象一样。因此,没有办法探索这些属性;换句话说,“for ... in”循环的右侧没有任何东西。

编辑 - 如果一个可以这样做,它将允许一些有趣的编码技术。可以编写实用程序函数,例如函数原型上的new-ish“.bind()”方法,以便返回的函数能够检查闭包范围中的某些特殊变量,用于调试或记录或其他目的。因此,制造功能的服务可以根据客户端环境的性质做更多“强大”的事情。 (我不知道有哪种语言允许这样做。)