Ответ 1
Да, вы должны использовать точки с запятой после каждого оператора в JavaScript.
Во многих ситуациях парсеры JavaScript вставляют точки с запятой для вас, если вы их не оставляете. Мой вопрос: вы их не оставляете?
Если вы не знакомы с правилами, там есть описание точки с запятой на сайте Mozilla. Здесь ключевой момент:
Если первый с помощью токенов n th в форме программы JavaScript является грамматически допустимым, но первый с помощью токенов n + 1 st не существует и существует строка перерыв между токенами n th и токенами n + 1 st тогда синтаксический анализатор пытается снова проанализировать программу после вставки символа виртуальной точки с запятой между n th и токены n + 1 st.
Это описание может быть неполным, поскольку оно не объясняет пример @Dreas. У кого-нибудь есть ссылка на полные правила или на какой пример получается точка с запятой? (Я попробовал это в JScript.NET.)
qaru.site/info/7052/... связан, но говорит только о конкретном сценарии.
Да, вы должны использовать точки с запятой после каждого оператора в JavaScript.
Неоднозначный случай, который ломается в отсутствие точки с запятой:
// 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. Он касается всех вопросов, поднятых ответами на этот вопрос.
Это самое лучшее объяснение автоматической вставки точки с запятой, которое я нашел где угодно. Это уберет всю вашу неуверенность и сомнения.
Нет, используйте только точки с запятой, когда они требуются.
Я использую точку с запятой, так как это моя привычка. Теперь я понимаю, почему у меня не может быть строки, разделенной на две строки... она помещает точку с запятой в конец каждой строки.