Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式检查JavaScript作用域链?_Javascript_Reflection_Scope - Fatal编程技术网

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

如何以编程方式检查JavaScript作用域链?,javascript,reflection,scope,Javascript,Reflection,Scope,在JavaScript调试器中,我可以手动检查函数的执行情况。例如,在对这段代码执行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 t

在JavaScript调试器中,我可以手动检查函数的执行情况。例如,在对这段代码执行
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 ();
控制台.log
上设置断点,我可以看到以下范围:

是否有一些方法可以通过编程方式执行此操作 如何检查在每个作用域级别定义的内容?

我(相当)确信这是不可能的。
即使Chrome调试器也不会一直跟踪您的作用域,而只是在它遇到断点时才跟踪。始终跟踪作用域链会花费太多内存(取决于闭包和上下文的复杂性)。有关更多信息,请参阅此功能请求:

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

然而,这个问题(或者确切地说是它的答案)可能会很有趣,因为它至少更接近你们的要求