如何检查Chrome中的匿名函数关闭

Tim*_*rks 5 javascript debugging closures google-chrome

我有一个匿名函数附加到Chrome中的事件监听器,我如何检查其闭包的值?

例如:

(function(){
  var i = 0;
  document.body.onclick = function() {
    i += 1;
  };
})();
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到i的当前值?

Tim*_*rks 4

不幸的是,如果你只是尝试在 Chrome 控制台中查看这个示例,你不会发现它很容易看到,你只会得到函数体:

> document.body.onclick
function () {
  i += 1;
}
Run Code Online (Sandbox Code Playgroud)

单独查看 document.body 会给你一个 DOM 树检查器,而不是 Javascript 对象视图。

所以这样做:

a = { f: document.body.onclick }
Run Code Online (Sandbox Code Playgroud)

您将在控制台中看到一个对象输出线,其中有一个可以打开的显示三角形,然后打开该字段f,您将看到一个<function scope>您可以打开的图标,最后显示一个Closure您可以打开的图标。

对于以不同方式注册的事件侦听器或函数可以挂起的其他方式(计时器等),找到允许您执行此操作的函数的引用可能具有挑战性。在 Chrome 中,如果使用了 addEventListener,则可以使用名为 getEventListeners(element) 的控制台函数。