【问题标题】:Node.js variables scoping in debugger调试器中的 Node.js 变量范围
【发布时间】:2016-01-06 06:45:37
【问题描述】:
var foo = 0, bar = 0
process.nextTick(function() {
  debugger
})

使用node debug进入节点REPL,尝试打印一些变量,发现foobar也无法访问:ReferenceError: foo is not defined

var foo = 0, bar = 0
process.nextTick(function() {
  console.log(foo)
})

process.nextTick(function() {
  debugger
})

但不知何故,我从另一个异步回调函数“访问”foo,它变得可见,打印bar 仍然引发ReferenceError

是关于 V8 JIT 还是 Node 实现细节?

【问题讨论】:

    标签: node.js scope


    【解决方案1】:

    代码似乎没有任何问题,我不确定您是如何使用调试器的,您可以尝试node-inspector 以获得更好的调试体验。

    您始终可以使用 console.log 来获取当前范围值。浏览器环境中的相同示例。

    var foo = 0, bar = 0
    window.setTimeout(function() {
        console.log(foo, bar);
    }, 0);

    【讨论】:

      【解决方案2】:

      是的,这是关于 V8 “优化”范围的问题——它忽略了函数内部代码实际上没有引用的变量,即使它们应该在范围内。

      如果您想在函数内部调试期间查看变量,可以添加引用该变量的无操作代码行。这将强制 V8 编译器使变量在该范围内可用。

      我想知道是否还有其他方法?...您是否可以以某种方式告诉 V8 保留更多内容?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-20
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        相关资源
        最近更新 更多