Точка с запятой перед функцией самозапускания?

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

Ответ 1

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

Файл A:

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

Файл B:

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

Файл A + B:

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

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

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

Файл B2:

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

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

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

Ответ 2

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

  • Группирование выражений для приоритета приоритета: (x + y) * z
  • Функция: f()

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

Рассмотрим

var x = 42

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

совпадает с

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

но

var x = 42

;

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

совпадает с

var x = 42;

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

Ответ 3

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

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

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

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

;(FunctionExpression)()

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

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

Счастливое кодирование.

Ответ 4

Для меня полутол двоеточие вызывало ошибку в Internet Explorer 8 (или, по крайней мере, то, что сказал IETester), и не позволяло вкладкам ui работать должным образом.

Сообщение об ошибке было Invalid character in jquery.all.ui.js Line: 1. Char: 1.

Я случайно наткнулся на полуколону. Когда я удалил ; из ;(function($), он работал, казалось бы, без побочных эффектов или потери функциональности. Я использую Drupal, не знаю, имеет ли это какое-либо отношение к делу.