2012-02-29 47 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

相關問題