Точка с запятой перед самопризывающей функцией? [Дубликат]

    

На этот вопрос уже есть ответ здесь:

    

В чем преимущество использования точки с запятой перед функцией, вызывающей себя в JavaScript. Я видел этот подход в нескольких популярных плагинах jQuery, и мне любопытно узнать, является ли это следующей удивительной вещью в JavaScript, которую я не знаю. Заранее спасибо, ребята!

95 голосов | спросил 7elephant 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 09 Sep 2011 21:17:02 +0400 2011, 21:17:02

3 ответа


0

Если вы объединяете два файла с самовозглашающимися функциями, которые выглядят так:

Файл A:

(function(){...A...})()

Файл B:

(function(){...B...})()

Файл A + B:

(function(){...A...})()(function(){...B...})()

У вас есть два оператора без разделителя. Это происходит, когда вы объединяете файлы, а затем минимизируете их.

Теперь автор файла B ставит точку с запятой:

Файл B2:

;(function(){...B2...})()

И вы получите рабочий скрипт:

(function(){...A...})();(function(){...B2...})()
ответил amoebe 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 09 Sep 2011 21:22:32 +0400 2011, 21:22:32
0

Самовызывающиеся функции заключены в круглые скобки, а в JavaScript круглые скобки перегружены и означают

  1. Группировка выражений для переопределения приоритета: (x + y) * z
  2. Применение функции: f()

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

Рассмотрим

var x = 42

(function () { ... })()

совпадает с

var x = 42(function () { ... })()

, но

var x = 42

;

(function () { ... })()

совпадает с

var x = 42;

(function () { ... })()
ответил Mike Samuel 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 09 Sep 2011 21:19:18 +0400 2011, 21:19:18
0

Я пишу все JavaScript без точки с запятой. При записи без точек с запятой в конце каждой строки из-за автоматической вставки точек с запятой (ASI) вначале есть несколько особых случаев, которые могут сначала «сбить с толку»:

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

  2. Просто шучу по поводу №2: его нет! (Изучите только одно правило, и вы тоже сможете наслаждаться жизнью без лишних точек с запятой ;-)

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

;(FunctionExpression)()

В моем случае речь идет не о «безопасности» или попытке «поймать ошибку» (если честно, если ваш стиль - использовать точки с запятой, а вы забыли точку с запятой, то вы уже создали ошибку в другом месте и пишете ; в начале для "безопасность" - фигня) , Нет; в моем случае это делается для согласованности с знанием моего выбранного стиля и «зная», что начало строки с оператором может продолжить выражение из предыдущей строки.

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

Удачного кодирования.

ответил 19 MaramMon, 19 Mar 2012 10:39:29 +04002012-03-19T10:39:29+04:0010 2012, 10:39:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132