我在做一些重構,想中斷調試和獲得一段代碼,所以我把我的函數爲什麼返回調試器在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