【问题标题】:How to debug JavaScript closure state?如何调试 JavaScript 闭包状态?
【发布时间】:2015-04-01 09:31:23
【问题描述】:

我有这个代码 sn-p,它可以科学地根据猫的腿数准确地计算出猫的速度。

function Cat()
{
    var self = this;

    var _legs = 0;

    self.addLeg = function()
    {
        _legs++;
    }

    self.speed = function()
    {
        return Math.pow(_legs,1.5)*2;
    }
}

Chrome 调试器

当我尝试调试我的一只猫时,我怎样才能看到内部变量,例如_legs

  • 无需添加额外代码来公开它,
  • 也没有在 cat 中“主动”执行函数(可能会改变状态)?

【问题讨论】:

  • 在调试时,您是否尝试过通过 Watch Expressions/Scope Variables 选项卡查看变量...?

标签: javascript google-chrome debugging closures


【解决方案1】:

您不能在不公开变量的情况下公开它。但是,您应该能够在单步执行构造函数、addLeg 和 speed 函数时看到 _legs 的状态。

【讨论】:

  • 您知道这是因为语言的工作原理而导致的理论上的限制,还是只是界面中的限制?
  • 看起来像一个“接口”限制,虽然是一个预期的限制。chrome 控制台界面反映了对象的属性和方法。闭包作用域变量不绑定到对象,而是绑定到函数的作用域上下文。顺便说一句,在 C#-Visual Studio 中也会发生同样的事情,您可以在其中创建一个带有变量的闭包并尝试使用调试器来查看包含的对象。因此,即使我可以想办法在 chrome 控制台中显示变量,它也没有任何意义。另外,考虑一下您可能有多个上下文用于同一功能(即运行 f
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 2010-09-20
  • 2019-04-11
  • 2017-01-31
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多