2012-02-29 49 views
0

我在做一些重构,想中断调试和获得一段代码,所以我把我的函数为什么返回调试器在JavaScript中失败?

return debugger;

一个永久更改之前返回,我得到了一个意外的标记错误(在铬)。

debugger; 
return; 

工作得很好。 ECMAScript规范中是否有一些实际上将此指定为正确的行为?这是一个浏览器错误?这种失败有没有什么特别的逻辑?

+0

我不是这个javascript调试器的专家......但你为什么要返回它呢?你期待你的代码中的调试器对象吗?这是我的理解,这只是一个指令,触发调试器... – jondavidjohn 2012-02-29 16:43:39

+0

这两个是完全不同的代码段。是什么让你认为一个人应该因为另一个人而工作?你会期望'返回回报;'也是有效的吗? – 2012-02-29 16:43:40

+1

另外,什么'返回调试器;'真的_mean_?它的逻辑将在哪里_不失败? – 2012-02-29 16:47:54

回答

3

return后面可以后面跟着一个Expression,当它被评估为返回结果时。 debugger不是表达式,而是Statement。因此,return debugger;因相同原因而失败return for (i = 0; i < 10; ++i);,return if (a > b);等失败  —因为您不能将语句用作表达式。

+0

啊,我明白了,所以'var f = function(){return if(1 === 1){}}'有同样的错误。这有一定程度的意义。 – 2012-02-29 16:48:41

+0

我不知道函数的最后一行上的调试器语句是否会破坏coffeescript .. – 2012-02-29 16:51:23

+0

@TJCrowder:var f = function(){return if(1 === 1){}}'_does_ has have the same错误,因为'return'下的'if'。不过,我不知道他为什么将周围的函数变量定义引入其中。正如你所看到的,这仅仅是困扰每个人的事情。 – 2012-02-29 16:52:46

1

这确实是正确的行为。原因是调试器被定义为语句,而不是表达式。这意味着,它只能在声明上下文中使用 - 也就是说,在形式:

debugger; 

你不能,但是,把它放在一个表达式中,如

return debugger; 

它实际上你不能写的原因,比如说,

return break; 
+0

它是重复的;不幸的是,当我点击提交按钮时,你已经发布了你的答案,我没有看到通知。抱歉。 – denisw 2012-03-01 16:06:07

相关问题