2013-04-04 100 views
0

我的代碼在停止工作時花了一段時間才找到這個問題。爲什麼這段代碼不會在JavaScript中引發錯誤?

console.log('before var'); 
var lastReview = '' 
    newReview; 
console.log('after var'); 

lastReview = ''我相信後面沒有逗號是一個語法錯誤,但是這兩個瀏覽器檢查,並在控制檯Firebug的報告沒有什麼。以下代碼console.log根本不會執行。

如果您直接在控制檯中運行代碼段,Chrome實際上會報告錯誤...但在實際頁面運行時不會發生錯誤。 Firefox在任何情況下都不會報告錯誤。

爲什麼開發工具不報告這些簡單的問題?

+0

http://www.jshint.com – 2013-04-04 18:13:28

回答

2

沒有(語法)錯誤 - 這個代碼是有效的JavaScript。據the rules,JS插入一個分號:

console.log('before var'); 
var lastReview = ''; <-- here 
    newReview; 
console.log('after var'); 

使newReview;成爲一個有效的,雖然無厘頭,語句。

儘管沒有語法錯誤,但由於未定義的變量,此代碼仍然會引發運行時錯誤(假設newReview之前未聲明)。

+0

好吧我想我的修改後的問題是,爲什麼運行時錯誤沒有在控制檯中報告?它只是默默停止運行。 – 2013-04-04 18:21:52

+0

@MichaelButler:[對我有用](http://jsfiddle.net/cjRBB/) - 我在控制檯中看到一條錯誤消息。 – georg 2013-04-04 18:29:49

+0

@MichaelButler它也適用於我(在Web Inspector和Firebug中)。什麼是你的Firebug版本?你有一些Firebug擴展安裝? – fflorent 2013-04-06 08:08:24

1

由於分號自動插入,如果丟失 - 所以在代碼中沒有語法錯誤。

在ECMAScript語言規範的Rules of Automatic Semicolon Insertion部分閱讀更多內容。

在你的榜樣,這樣的:

var lastReview = '' 

變爲:

var lastReview = ''; 
相關問題