在 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
上设置断点,我看到以下范围:
有什么方法可以以编程方式做到这一点吗?
我如何检查在每个范围级别定义的内容?
最佳答案
我(非常)确定这是不可能的。
即使是 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/