【发布时间】:2014-05-12 21:59:34
【问题描述】:
我希望能够获得当前范围内所有变量的列表。我知道这可能是不可能的(例如1、2、3,但它确实有助于简化我目前正在研究的节点/浏览器库的解析算法。
有一件事:它不需要被打印或安全地“缩小”。
我希望能够通过读取 JS 库并动态地evaling 找出引入了哪些变量,从而找到两者之间的状态差异。我知道这种方法在纸上听起来可怕(我很熟悉 eval 的仇恨),但如果有更好的方法来找到它,而不是简单地解析整个库(这对于除了 C/etc 之外的任何语言),我都在听。
为了你对eval的公然使用哭泣,我知道使用闭包来保护父范围不被修改。如果它在浏览器环境中,我也将能够防止在 eval 中更改浏览器显示(临时更改一些 DOM 构造函数)。
【问题讨论】:
-
听起来您想使用合适的 IDE……
-
这与我目前正在开发的应用程序有关,这是一个以 Node 和浏览器为目标的 JS 编译器。也许这应该提供一点背景。此外,我完全意识到这些类型的存在,但我正在寻找一些功能更全面的东西,它更像是 JS 的 GCC,而不仅仅是一个简单的混淆器。 UglifyJS2 和 Closure Compiler 似乎都没有优化 IMO 的一些东西,并且需要单独的工具来构建和缩小,这没有什么意义。
-
所以你的意思是你实际上是在处理要转译的 javascript 的语法树?您需要更清楚地说明这一点,每个人都假设您正在执行代码并希望以编程方式访问范围。
-
不一定。每个人都认为是非常正确的,但我将在这里发布我自己的答案(我基本上在寻找什么)。
-
好吧,如果您使用的是
eval并且实际上是在在转译器 中执行(副作用)代码,那么我确实我在 哭了。
标签: javascript eval scope state