Вы рекомендуете использовать точку с запятой после каждого оператора в JavaScript?
во многих ситуациях синтаксические анализаторы JavaScript вставляют точки с запятой для вас, если вы их оставите. Мой вопрос в том, оставляете ли вы их?
Если вы не знакомы с правилами, есть описание вставки точки с запятой на сайт Mozilla. Вот ключевой момент:
Если первый через nе маркеры формы программы JavaScript грамматически допустимы, но первый через n+1 st токены не и есть разрыв линии между nе токены и n+1 st токены, затем синтаксический анализатор пытается разобрать программу снова после вставки виртуальной точки с запятой между Nе и n+1 st жетоны.
Это описание может быть неполным, потому что оно не объясняет пример @Dreas. У кого-нибудь есть ссылка на полные правила, или посмотреть, почему пример получает точку с запятой? (Я попробовал его в JScript.NET.)
этот вопрос stackoverflow связан, но только говорит о конкретном сценарии.
11 ответов:
неоднозначный случай, который ломается при отсутствии точки с запятой:
// define a function var fn = function () { //... } // semicolon missing at this line // then execute some code inside a closure (function () { //... })();
это будет интерпретироваться как:
var fn = function () { //... }(function () { //... })();
мы в конечном итоге передавая вторую функцию в качестве аргумента первой функции, а затем пытается назвать результат первого вызова функции в качестве функции. Вторая функция завершится с ошибкой"... это не функция" ошибка во время выполнения.
Да, вы всегда должны использовать точку с запятой. Зачем? Потому что если вы в конечном итоге используете компрессор JavaScript, весь ваш код будет на одной строке, что нарушит ваш код.
попробуйте http://www.jslint.com/; это заденет ваши чувства, но покажет вам много способов написать лучший JavaScript (и один из способов-всегда использовать точки с запятой).
то, что все, кажется, пропускают, это то, что точки с запятой в JavaScript не являются утверждением разделители но заявление разделители. Это тонкая разница, но это важно для того, как парсер запрограммирован. Относитесь к ним так, как они есть, и вы обнаружите, что оставить их будет чувствовать себя гораздо более естественно.
я запрограммировал на других языках, где точка с запятой является утверждением разделитель а также необязательно, как парсер делает "вставка с запятой" в новых строках, где она не нарушает грамматику. Так что я не был знаком с ним, когда я нашел его в JavaScript.
Мне не нравится шум на языке (что является одной из причин, по которой я плохо разбираюсь в Perl), а полуколоны-это шум в JavaScript. Поэтому я их опускаю.
Я бы сказал согласованность важнее, чем сохранение нескольких байт. Я всегда включаю точки с запятой.
С другой стороны, я хотел бы указать, что есть много мест, где точка с запятой синтаксически не требуется, даже если компрессор уничтожает все доступные пробелы. например, в конце блока.
if (a) { b() }
JavaScript автоматически вставляет точки с запятой при интерпретации кода, поэтому если вы поместите значение оператора return ниже строки, оно не будет возвращено:
Код:
return 5
Интерпретация JavaScript:
return; 5;
таким образом, ничего не возвращается, из-за автоматической вставки точки с запятой JavaScript
Я думаю, что это похоже на то, что в прошлом подкасте обсуждается. "Будьте либеральны в том, что вы принимаете" означает, что дополнительная работа должна быть помещена в синтаксический анализатор Javascript, чтобы исправить случаи, когда точки с запятой были опущены. Теперь у нас есть лодка страниц, плавающих вокруг с плохим синтаксисом, который может сломаться в один прекрасный день в будущем, когда какой-то браузер решит быть немного более строгим к тому, что он принимает. Этот тип правил также должен применяться к HTML и CSS. Вы можете написать сломанный HTML и CSS, но не удивляйтесь, когда вы получаете странные и трудно отлаживать поведение, когда какой-то браузер не правильно интерпретировать ваш неправильный код.
статьи точки с запятой в JavaScript являются необязательными делает некоторые действительно хорошие моменты о том, чтобы не использовать полу двоеточия в Javascript. В нем рассматриваются все моменты, которые были подняты ответами на этот вопрос.
Это лучшее объяснение автоматической вставки точки с запятой что я нашел в любом месте. Это развеет всю вашу неуверенность и сомнения.