我在做一些重构,想中断调试和获得一段代码,所以我把我的函数为什么返回调试器在JavaScript中失败?
return debugger;
一个永久更改之前返回,我得到了一个意外的标记错误(在铬)。
debugger;
return;
工作得很好。 ECMAScript规范中是否有一些实际上将此指定为正确的行为?这是一个浏览器错误?这种失败有没有什么特别的逻辑?
我在做一些重构,想中断调试和获得一段代码,所以我把我的函数为什么返回调试器在JavaScript中失败?
return debugger;
一个永久更改之前返回,我得到了一个意外的标记错误(在铬)。
debugger;
return;
工作得很好。 ECMAScript规范中是否有一些实际上将此指定为正确的行为?这是一个浏览器错误?这种失败有没有什么特别的逻辑?
return
后面可以后面跟着一个Expression,当它被评估为返回结果时。 debugger
不是表达式,而是Statement。因此,return debugger;
因相同原因而失败return for (i = 0; i < 10; ++i);
,return if (a > b);
等失败 —因为您不能将语句用作表达式。
啊,我明白了,所以'var f = function(){return if(1 === 1){}}'有同样的错误。这有一定程度的意义。 – 2012-02-29 16:48:41
我不知道函数的最后一行上的调试器语句是否会破坏coffeescript .. – 2012-02-29 16:51:23
@TJCrowder:var f = function(){return if(1 === 1){}}'_does_ has have the same错误,因为'return'下的'if'。不过,我不知道他为什么将周围的函数变量定义引入其中。正如你所看到的,这仅仅是困扰每个人的事情。 – 2012-02-29 16:52:46
这确实是正确的行为。原因是调试器被定义为语句,而不是表达式。这意味着,它只能在声明上下文中使用 - 也就是说,在形式:
debugger;
你不能,但是,把它放在一个表达式中,如
return debugger;
它实际上你不能写的原因,比如说,
return break;
它是重复的;不幸的是,当我点击提交按钮时,你已经发布了你的答案,我没有看到通知。抱歉。 – denisw 2012-03-01 16:06:07
我不是这个javascript调试器的专家......但你为什么要返回它呢?你期待你的代码中的调试器对象吗?这是我的理解,这只是一个指令,触发调试器... – jondavidjohn 2012-02-29 16:43:39
这两个是完全不同的代码段。是什么让你认为一个人应该因为另一个人而工作?你会期望'返回回报;'也是有效的吗? – 2012-02-29 16:43:40
另外,什么'返回调试器;'真的_mean_?它的逻辑将在哪里_不失败? – 2012-02-29 16:47:54