通过 node debug 进入 debugger ,在 repl 中打印无论 foo 还是 bar 都会报错, ReferenceError: foo is not defined 。
var foo = 0, bar = 0
process.nextTick(function() {
debugger
})
但是,只要在另外一个异步回调中"使用" foo 这个变量后,再次进入 debugger ,会发现 foo 已经可以访问,然而 bar 还是 ReferenceError 。
Google 了一会儿找不到答案...
var foo = 0, bar = 0
process.nextTick(function() {
console.log(foo)
})
process.nextTick(function() {
debugger
})
1
otakustay 2016-01-06 15:42:18 +08:00
V8 给力的 GC 机制,分析出这个 callback 中并不会使用 foo 和 bar ,就直接把这 2 个变量回收掉了
当然这也是正确的,你既然 callback 里不使用这 2 个变量,为啥要在意它们是什么值呢 |
2
zckevin OP @otakustay 这样啊,多谢指教!
其实也就是想像 Python 里调试时插入一个 repl : ```python # .... import pdb pdb.set_trace() ``` 我的使用情景大概是这样: ```javascript var server = new Server() server.on('whatever', function() { debugger }) server.listen(SERVER_PORT) ``` server 上挂了一大堆状态,想要在运行时动态 inspect ,结果在 callback 里根本无法访问 server... |