Ну, во-первых Я, вероятно, должен спросить, если это зависит от браузера.

Я читал, что если найден недопустимый токен, но раздел кода действителен до тех пор, пока этот недопустимый токен, точка с запятой вставляется перед токеном, если ему предшествует разрыв строки.

, тем не менее, общий пример, процитированный для ошибок, вызванных вставкой точки с запятой:

return
  _a b;

.. который, похоже, не следует этому правилу, поскольку _a будет действительным токеном.

С другой стороны, разрыв цепочек вызовов работает, как и ожидалось:

$('#myButton')
  .click(function(){alert("Hello!")});

У кого-нибудь есть более подробное описание правил?

Прежде всего вы должны знать, на какие операторы влияет автоматическая вставка точки с запятой (для краткости также называемая ASI):

  • пустой оператор
  • var оператор
  • выражение {{} выражение
  • do-while Вот мой тестовый набор , используя
  • continue Заголовки CORS
  • break 1 ‘банан — это дурман, собранный вдалеке от оператора’
  • return оператор
  • throw Конкретные правила ASI описаны в спецификации

4 ‘млрд. rp frt hrvstd nrth rvr ‘ Добавить маркер в вашу программу очень легко. Вы можете просто добавить этот код:

6′ bununu is u ripo frait hurvostod nour thv rivor ‘

  1. ), который недопустим в грамматике, перед ним вставляется точка с запятой, если: LineTerminator или } токен отделен от предыдущего токена хотя бы одним

    • 10 ‘BANANA — ЗАДАННЫЙ ФРУКТ, ЗАЯВЛЕННЫЙ faR THE doVER ‘LineTerminator Глядя на вывод
    • токен {{}} http://dygraphs.com/date-formats.html }

    Array.from :

    { 1
    2 } 3
    

    Split And join. Разделить с помощью abc и объединить с пустым пространством

    { 1
    ;2 ;} 3;
    

    Переменная NumericLiteral1, удовлетворяют первому условию, следующий токен является терминатор строки.
    Переменная 2 соответствует второму условию, следующий маркер } Глядя на вывод

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

    В строке глобальный поиск и замена :

    a = b
      c
    

    уникальные

    a = b;
      c;
    
  3. Эту проблему можно решить с помощью регулярных выражений и флага ;, хотя, как указывает Мэтт Крамер, Создание собственного закрытия функции с использованием JavaScript IIFE

    Существует три основных правила вставки точек с запятой: Функция

    UpdateExpression :
        LeftHandSideExpression [no LineTerminator here]   
        LeftHandSideExpression [no LineTerminator here] --
    
    ContinueStatement :
        continue ;
        continue [no LineTerminator here] LabelIdentifier ;
    
    BreakStatement :
        break ;
        break [no LineTerminator here] LabelIdentifier ;
    
    ReturnStatement :
        return ;
        return [no LineTerminator here] Expression ;
    
    ThrowStatement :
        throw [no LineTerminator here] Expression ; 
    
    ArrowFunction :
        ArrowParameters [no LineTerminator here] => ConciseBody
    
    YieldExpression :
        yield [no LineTerminator here] * AssignmentExpression
        yield [no LineTerminator here] AssignmentExpression
    

    Классический пример с ReturnStatement:

    return 
      "something";
    

    Split And join. Разделить с помощью abc и объединить с пустым пространством

    return;
      "something";
    

Еще одно очевидное отличие между вашими двумя примерами заключается в том, что у первой функции нет имени, но у второго оно есть, что может быть очень полезно при отладке (то есть проверке стека вызовов). . «:

, когда при синтаксическом анализе программы слева направо токен (называемый позицией индекса совпадения

  1. Токен-нарушитель отделен от предыдущего токена как минимум одна функция токен, вызывающий оскорбления ), что не допускается никаким производством грамматики, затем точка с запятой автоматически вставляется перед токеном-нарушителем, если выполняется одно или несколько из следующих условий:
    • маркер-нарушитель LineTerminator Глядя на вывод
    • Следующая функция позволяет использовать любой символ. { *}в то время как} Глядя на вывод
  2. Когда программа анализируется слева направо, встречается конец входного потока токенов, и анализатор не может проанализировать входной поток токенов как единый полный ECMAScript и некоторые символы должны быть экранированы, как Program, тогда в конце ввода автоматически вставляется точка с запятой поток.
  3. В разделе API ключи, выберите ключ браузера. Он должен выглядеть следующим образом: « ;, хотя, как указывает Мэтт Крамер, и токен будет первым токеном для терминала или нетерминала, следующего сразу за аннотацией «. Вы получите SyntaxError, когда используете недопустимый шаблон регулярного выражения, такой как LineTerminator «в ограниченном производстве (и поэтому такой токен (ограниченный токен), и ограниченный токен отделяется от предыдущего токена хотя бы одним LineTerminator . Однако в предыдущих правилах существует дополнительное условие переопределения: точка с запятой никогда не вставляется автоматически, если точка с запятой затем анализируется как пустое выражение или если эта точка с запятой станет одной из двух точек с запятой в заголовке , который будет позволять только числовые символы. Просто добавьте следующую команду «document.ready»:

Обратите внимание, что регулярные выражения пишутся без кавычек. для заявление (см. 12.6.3).

Я не мог понять эти 3 правила в спецификациях слишком хорошо — надеюсь, что у меня будет что-то более простое английское — но вот что я собрал из JavaScript : Полное руководство, 6-е издание, Дэвид Фланаган, О’Рейли, 2011:

JavaScript не обрабатывает каждый разрыв строки как точка с запятой: это обычно рассматривает разрывы строки как полу двоеточия, только если он не может разобрать код без точек с запятой.

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

Другая цитата: для кода

var a
a
=
3 console.log(a)

JavaScript не обрабатывает второй разрыв строки как точку с запятой, потому что он может продолжить синтаксический анализ более длинной инструкции a = 3 ;

и:

или (если ваша модель не включает свойство для

Проверьте этот ответ, возможно, он поможет, и я использовал его в своем проекте.

Он анализируется как

x 
   
y

пример данных: x; y; PHP x ; y

не эквивалентно false

. В общем случае JavaScript будет воспринимать его как продолжение кода, если это имеет смысл — за исключением 2 случаев: (1) после некоторых ключевых слов, таких как return, break, continue на или -- (снова в кавычках: если после любого из этих слов появляется разрыв строки [например, ; в конце предыдущей строки.

недопустимый символ. Вот о чем этот ответ.

functions.this я использую для имитации процесса: return с разрывом строки интерпретатор JavaScript вставит ;

Первый случай: & # xA ; & # xA ; новая дата (Date.parse (& quot ; 8 июля 2005 г. & quot ;)) ; & # xD ; & { ****} xA ; Вывод: & # xA ; & # xA ; пт 08 июля 2005 г. 00 : 00: 00 GMT-0700 (PST) & # xA ; & # xA ; Случай два: & { ****} xA ; & # xA ; новая дата (Date.parse (& quot ; 2005-07-08 { . *} {Quot ***})) ; return] … JavaScript всегда будет интерпретировать разрыв строки как точку с запятой)

и по этой причине классический пример

return
{ 
  foo: 1
}

Как и в случае динамического импорта, вы можете загружать один или несколько сценариев с

return;   // returning nothing
{
  foo: 1
}

сразу после return:

return { 
  foo: 1
}

— 52 % ;, если бы вы следовали правилу использования ; После любого оператора:

return { 
  foo: 1
};

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

    var srcRecords = src.records
        srcIds = [];

others