【问题标题】:How to debug JavaScript closure?如何调试 JavaScript 闭包?
【发布时间】:2012-07-07 13:06:40
【问题描述】:
  1. 问题是为什么要调试成函数,我们怎么知道函数引用的闭包内容?

    我知道谷歌浏览器会在“作用域变量”部分显示一个闭包,但是其他浏览器呢? (更新:FF 也有类似的东西,但不叫它“闭包”,就像局部变量一样)

  2. 第一个问题的动机实际上是在阅读 - 附录 A 时出现的。

    在第 355 页,作者说由于循环引用(单击处理程序引用具有 DOM 按钮的闭包内容),以下代码片段将导致 IE 内存泄漏。

    我只是好奇是否通过调试到闭包内容的点击处理程序是这种情况。但是谷歌浏览器没有显示任何闭包变量。

    因此我想知道作者如何知道循环引用问题..


$(document).ready(function() {
  var button = document.getElementById('button-1');
  button.onclick = function() {
    $.print('hello');
    return false;
  };
});

谢谢。

【问题讨论】:

  • 作者知道是因为(在这种情况下)很明显:变量“button”指的是一个DOM节点,并且它的“onclick”属性设置为一个函数,而该函数的变量在它的范围。
  • 等等,这不是只有在处理程序实际引用按钮时才会出现问题吗?这是正确的例子吗?
  • @Pointy 我的好奇实际上是onclick 处理函数没有对变量button 的任何引用。因此,变量button 可以如何关闭该函数?否则我的想法是不是很不正确?
  • 如果你在$.print 行打断,你就不能在那里设置任何闭包变量。 (在谷歌浏览器中)

标签: javascript jquery closures


【解决方案1】:

我建议您使用 Firebug 来调试您的代码。它是最好的插件,但没有确切的问题答案,但您可能想看看这些链接。

Tools for debugging memory leaks in JavaScript

how to trace or debug javascript closures in firebug

Debugging closures in javascript

您甚至可以查看YouTube 链接以获取更多信息。

希望我已经尝试回答一些有用的东西。

【讨论】:

  • 这个问题很具体。这个答案太笼统了。请添加更多详细信息。
  • @RobW 我用几个链接编辑了我的答案。希望这能让你稍微满意。尽管它们不是我认为的完美答案。 :)
  • @RobW 第一个链接为我提供了我所知道的最佳解决方案之一。它没有完美地回答这个问题,但会给出一个很好的见解。
  • @ShivKumarGanesh 感谢您的链接。然而,这些帖子基本上告诉我们,FF 或 Chrome 都能够调试我已经知道的关闭。这不是我问的问题。
猜你喜欢
  • 2015-04-01
  • 1970-01-01
  • 2016-12-05
  • 2013-03-11
  • 2010-11-02
  • 2010-09-11
  • 1970-01-01
  • 2015-03-04
相关资源
最近更新 更多