Почему я должен использовать точку с запятой после каждой функции в JavaScript?

Я знаю, что это не точно скрыто, но не слишком много людей знают о команда PIVOT . Я смог изменить хранимую процедуру, которая использовала курсоры и заняла 2 минуты для столкновения с быстрыми 6 вторыми частями кода, который был одной десятой количество строк!

277
задан Machavity 1 March 2017 в 03:35
поделиться

6 ответов

Точки с запятой после объявлений функций не являются обязательными .

Грамматика FunctionDeclaration описана в спецификация выглядит так:

function Identifier ( FormalParameterListopt ) { FunctionBody }

Грамматически точки с запятой не требуется, но может возникнуть вопрос, почему?

Точки с запятой служат для отделения друг от друга операторов , а FunctionDeclaration - не оператор .

Декларации функций оцениваются до того, как код входит в выполнение, подъем - это общее слово , используемое для объяснения этого поведения.

Термины «объявление функции» и «оператор функции» часто ошибочно используются как синонимы,поскольку в спецификации ECMAScript не описан оператор функции, однако есть некоторые реализации, которые включают оператор функции в свою грамматику, особенно Mozilla-, но, опять же, это нестандартно.

Однако точки с запятой всегда рекомендуются там, где вы используете FunctionExpressions , например:

var myFn = function () {
  //...
};

(function () {
  //...
})();

Если вы опустите точку с запятой после первой функции в приведенном выше примере, вы получите совершенно нежелательные результаты:

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

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

Рекомендуемые лекции:

420
ответ дан 23 November 2019 в 02:06
поделиться

Я использую их после объявления функции как переменной:

var f = function() { ... };

, но не после определений в классическом стиле:

function f() {
    ...
}
38
ответ дан 23 November 2019 в 02:06
поделиться

JS Lint является фактическим соглашением, и в нем нет точки с запятой после тела функции. См. Раздел «Точка с запятой» .

20
ответ дан 23 November 2019 в 02:06
поделиться

Просто оставайся последовательным! Они не нужны, но я лично использую их, потому что большинство техник минификации полагаются на точку с запятой (например, Packer ).

7
ответ дан 23 November 2019 в 02:06
поделиться

На самом деле все зависит от ваших предпочтений. Мне нравится заканчивать строки кода точкой с запятой, потому что я привык к Java, C ++, C # и т. Д., Поэтому я использую те же стандарты для кодирования в javascript.

Я обычно не заканчиваю объявления функций точками с запятой, но это только мое предпочтение.

Браузеры будут запускать это в любом случае, но, возможно, когда-нибудь они предложат более строгие стандарты, регулирующие это.

Пример кода, который я бы написал:

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}
5
ответ дан 23 November 2019 в 02:06
поделиться

На самом деле это больше, чем вопрос соглашения или согласованности.

Я вполне уверен, что , а не размещение точек с запятой после каждого оператора замедляет внутренний синтаксический анализатор, потому что он имеет чтобы выяснить, где находится конец утверждения. Хотел бы я иметь несколько удобных цифр, чтобы вы положительно это подтвердили, но, возможно, вы можете сами погуглить. :)

Кроме того, когда вы сжимаете или уменьшаете код, отсутствие точек с запятой может привести к уменьшенной версии вашего скрипта, которая не выполняет то, что вы хотели, потому что все пробелы исчезают.

3
ответ дан 23 November 2019 в 02:06
поделиться