如何以编程方式检查JavaScript作用域链?
在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
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的任何实现中都没有在运行时调用此函数的命令然而,这个问题(或者确切地说是它的答案)可能会很有趣,因为它至少更接近你们的要求