Javascript 当使用'this'调用匿名函数时,NodeJS调试器是否崩溃?
我有一个包含以下内容的js文件:Javascript 当使用'this'调用匿名函数时,NodeJS调试器是否崩溃?,javascript,node.js,debugging,Javascript,Node.js,Debugging,我有一个包含以下内容的js文件: (function (context) { console.log(123); debugger; })(this); 然后在调试模式下运行脚本: $ node debug script.js 调试模式下的其他行没有绿色的原因是什么 如果我在函数内部执行以下操作: debug> repl > context {} 但当我这么做的时候: > this 它崩溃了。。。即使按CTRL+C也无法停止该过程,只能关闭选项卡 此外
(function (context) {
console.log(123);
debugger;
})(this);
然后在调试模式下运行脚本:
$ node debug script.js
调试模式下的其他行没有绿色的原因是什么
如果我在函数内部执行以下操作:
debug> repl
> context
{}
但当我这么做的时候:
> this
它崩溃了。。。即使按CTRL+C也无法停止该过程,只能关闭选项卡
此外,只需在文件的第一行添加var foo=this
,即可修复此行为
为什么??这是一个错误吗?在节点挂起的同一位置,当(在repl模式下)您请求此的值时,请检查以下值:
this === global
您应该得到true
。此外,如果您要求输入全局
的值,节点将像对此
一样挂起。但是,您可以毫无问题地访问某些字段。我能够访问此.module
(或全局.module
)并获得合理的值
这看起来像一个bug,我敢说这可能是一个处理循环引用的bug。通常,Node可以通过显示[Circular]
来正确处理它们,但在这里的具体案例中似乎存在问题
执行任何这些操作都会导致调试器为this
打印{}
,而不会挂起:
- 增加
“严格使用”代码>位于文件的开头
- 添加
作为文件的第一条语句调试器
- 添加具有副作用的语句,如
console.log(“start”)代码>位于文件的开头
- 添加一个可以被优化的语句,比如
varx=1文件开头的code>或
函数foo(){}
- 这:
调试器在var x = 1; (function (context) { console.log(123); debugger; })(this); console.log(x);
上停止,因此它不像是被优化掉了var x=1
v0.10.24
这是最新的稳定版本吗?调试器在varx=1
上停止,因此它不像是被优化掉了。-据我所知,调试器在第一行停止(即使没有断点)。回答得好!