如何获取当前范围中定义的所有变量的列表?

时间:2014-05-12 21:59:35

标签: javascript eval scope state

我希望能够获得当前范围内所有变量的列表。我知道这可能是不可能的(例如123但它对于简化我目前正在处理的节点/浏览器库的解析算法非常有帮助

一件事:它不需要打印或安全“缩小”。

我想通过读取JS库并动态地eval来找出引入了哪些变量,找到两者之间的状态差异。我知道这种方法听起来很糟糕在纸上(我很熟悉eval的仇恨),但如果有更好的方法来找到这个而不仅仅是解析整个库(这对于除了C /等以外的任何语言。),我都是耳朵。


对于你在公然使用eval时哭泣,我知道使用闭包来保护父范围不被修改。如果它在浏览器环境中(暂时更改一些DOM构造函数),我也将能够阻止对eval中浏览器显示的更改。

1 个答案:

答案 0 :(得分:3)

是和否。 "否"在几乎所有情况下。 "是"但是,如果要检查全局范围,则只能以有限的方式进行。请看以下示例:

var a = 1, b = 2, c = 3;

for ( var i in window ) {
    console.log(i, typeof window[i], window[i]);
}

在150多个其他内容中,有以下内容:

getInterface function getInterface()
i string i // <- there it is!
c number 3
b number 2
a number 1 // <- and another
_firebug object Object firebug=1.4.5 element=div#_firebugConsole
"Firebug command line does not support '$0'"
"Firebug command line does not support '$1'"
_FirebugCommandLine object Object
hasDuplicate boolean false

因此,可以列出当前范围内的一些变量,但它不可靠,简洁,高效或易于访问。