【问题标题】:How to programmatically inspect the JavaScript scope chain?如何以编程方式检查 JavaScript 作用域链?
【发布时间】:2015-02-19 07:43:51
【问题描述】:

在 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 上设置断点,我看到以下范围:

有没有办法以编程方式做到这一点?
如何检查每个范围级别定义的内容?

【问题讨论】:

    标签: javascript reflection scope


    【解决方案1】:

    我(非常)确定这是不可能的。
    即使是 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 问题(或者准确地说是答案)可能很有趣,因为它至少更接近您的要求。

    【讨论】:

      猜你喜欢
      • 2010-11-07
      • 2011-12-06
      • 1970-01-01
      • 2010-09-19
      • 2012-06-14
      • 2012-03-26
      • 2015-10-20
      • 2014-11-26
      • 2012-03-10
      相关资源
      最近更新 更多