javascript - 如何以编程方式检查 JavaScript 作用域链?

标签 javascript reflection scope

在 JavaScript 调试器中,我可以手动检查 scope chain的一个功能。例如,在这段代码上执行 foo() 时:

var x1 = "global";
var foo = (function main () {
    var x2 = "inside obj";
    return function internalFoo () {
        var x3 = "inside internalFoo";
        console.log (x1+','+x2+','+x3); // get the scopes
    };
})();
foo ();

并在 console.log 上设置断点,我看到以下范围:

Scope Variables seen in Chrome Debugger

有什么方法可以以编程方式做到这一点吗?
我如何检查在每个范围级别定义的内容?

最佳答案

我(非常)确定这是不可能的。
即使是 Chrome 调试器也不会一直跟踪您的范围,但只有在遇到断点时才会跟踪。一直跟踪范围链会消耗太多内存(取决于闭包和上下文的复杂性)。有关详细信息,请参阅此功能请求:https://groups.google.com/forum/#!topic/google-chrome-developer-tools/wKEMpKjXR7s

ECMA 262 (10.3.1)描述了如何完成标识符解析,其中最重要的部分是调用 GetIdentifierReference (lex, name, strict),这在 ECMA 262 (10.2.1) 中有描述。 .据我所知,在 ECMAScript 的任何实现中都没有命令在运行时调用此函数。

然而this问题(或准确地说是答案)可能很有趣,因为它至少更接近您的要求。

关于javascript - 如何以编程方式检查 JavaScript 作用域链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28600967/

相关文章:

r - 函数内 ddply 未找到对象错误

c - 在 objective-c 类中定义的 c 函数的范围是什么?

javascript - 为基于鼠标事件的动态div创建一个类

javascript - 原型(prototype)继承导致共享引用

javascript - 从 C# 中的代码隐藏将 JavaScript 注入(inject)到链接按钮

c# - Reflection.Typeinfo/Reflection.Type 没有 GetProperties/GetFields 方法

c# - 在 C# 中反射(reflect)派生类

Javascript 变量正在消失

java - 确定类的扩展接口(interface)

JavaScript(变量范围): variable does not get the value assigned to it