Javascript 当使用'this'调用匿名函数时,NodeJS调试器是否崩溃?

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也无法停止该过程,只能关闭选项卡 此外

我有一个包含以下内容的js文件:

(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
    函数foo(){}

  • 这:

    var x = 1;
    
    (function (context) {
       console.log(123);
       debugger;
    })(this);
    
    console.log(x);
    
    调试器在
    var x=1
    上停止,因此它不像是被优化掉了


我无法复制。您使用的是哪个版本?@thefourtheye
v0.10.24
这是最新的稳定版本吗?调试器在var
x=1
上停止,因此它不像是被优化掉了。-据我所知,调试器在第一行停止(即使没有断点)。回答得好!