如何获取当前作用域中定义的所有变量的列表?

Isi*_*ows 4 javascript state scope eval

我希望能够获取当前范围内所有变量的列表。我知道这可能是不可能的(例如123 ),但这对于简化我当前正在开发的节点/浏览器库的解析算法确实很有帮助。

一件事:它不需要打印,也不需要“缩小”。

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


对于你对公然使用 的抱怨eval,我知道使用闭包来保护父作用域不被修改。如果是在浏览器环境中,我还能够防止在 eval 中更改浏览器显示(暂时更改一些 DOM 构造函数)。

exp*_*sss 5

是和不是。几乎在所有情况下都会说“不”。“是”,但如果您想检查全局范围,则只能以有限的方式。举个例子:

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

for ( var i in window ) {
    console.log(i, typeof window[i], window[i]);
}
Run Code Online (Sandbox Code Playgroud)

除了 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
Run Code Online (Sandbox Code Playgroud)

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