调试器

时间:2016-01-06 06:45:37

标签: node.js scope

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

使用node debug输入节点REPL,并尝试打印一些变量,我发现无法访问foobarReferenceError: foo is not defined

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

process.nextTick(function() {
  debugger
})

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

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

2 个答案:

答案 0 :(得分:0)

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

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



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




答案 1 :(得分:0)

是的,这是关于V8“优化”范围的 - 它省略了函数内部代码实际未引用的变量,即使它们应该在范围内。

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

我想知道是否有另一种方式?...你是否能以某种方式告诉V8保留更多的东西?