2013-04-04 2 views
0

Мне понадобилось некоторое время, чтобы найти эту проблему в моем коде, когда она перестала работать.Почему эта часть кода не выдает ошибку в JavaScript?

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

Там нет запятой после lastReview = '' который я считаю, является синтаксической ошибкой, однако, как Chrome инспектор и Firebug отчет ничего в консоли. Следующий код console.log просто не выполняется.

Chrome действительно сообщает об ошибке, если вы запускаете фрагмент непосредственно в консоли ... но не тогда, когда выполняется фактическая страница. В любом случае Firefox не сообщает об ошибке.

Почему инструменты dev не сообщают об этих простых проблемах?

+0

http://www.jshint.com –

ответ

2

Там нет (синтаксис) ошибки - это код действителен JavaScript. Согласно the rules, JS вставляет точку с запятой:

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

так, что newReview; становится действительным, хотя и бессмысленное, заявление.

Несмотря на отсутствие синтаксической ошибки, этот код по-прежнему выдает ошибку времени выполнения из-за неопределенной переменной (предполагая, что newReview не был объявлен ранее).

+0

OK Я полагаю, что мой пересмотренный вопрос тогда, почему ошибка времени выполнения не сообщается в консоли? Он просто бесшумно останавливается. –

+0

@MichaelButler: [работает для меня] (http://jsfiddle.net/cjRBB/) - Я вижу сообщение об ошибке в консоли. – georg

+0

@MichaelButler Это работает и для меня (как для веб-инспекторов, так и для Firebug). Какая у вас версия Firebug? У вас есть несколько Firebug Extensions? – fflorent

1

Потому что полуколонки автоматически вставлены в любом случае, если они отсутствуют, поэтому в коде отсутствует синтаксическая ошибка.

Подробнее об этом здесь в разделе Rules of Automatic Semicolon Insertion раздела Спецификация языка ECMAScript.

В вашем примере, это:

var lastReview = '' 

становится:

var lastReview = '';