Точка с запятой перед функцией самозапускания?
В чем преимущество использования точки с запятой перед функцией самозапуска в 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, не знаю, имеет ли это какое-либо отношение к делу.