Точка с запятой перед самостоятельным вызовом функции? [дубликат]
этот вопрос уже есть ответ здесь:
в чем преимущество использования точки с запятой перед функцией самостоятельного вызова в JavaScript. Я видел этот подход в нескольких популярных плагинах jQuery, и мне любопытно узнать, является ли это следующей потрясающей вещью в JavaScript, что я не знаю. Заранее спасибо, ребята!
4 ответа:
если вы объединяете два файла с самопроизвольными функциями вместе, которые выглядят следующим образом:
Файл A:
(function(){...A...})()
Файл B:
(function(){...B...})()
Файл A+B:
(function(){...A...})()(function(){...B...})()
у вас есть два оператора без разделителя. Это происходит, когда вы cat файлы вместе, а затем минимизировать их.
теперь автор файла B ставит точку с запятой перед:
Файл B2:
;(function(){...B2...})()
и вы получите рабочую сценарий:
(function(){...A...})();(function(){...B2...})()
самопроизвольные функции окружены скобками, а в JavaScript скобки перегружены, чтобы означать
- группировка выражений для переопределения приоритета:
(x + y) * z
- функции приложения :
f()
если поставить точку с запятой перед функцией, функция не станет аргументом для того, что ей предшествует, когда скобки будут перепутаны с функцией приложение.
считают
var x = 42 (function () { ... })()
это то же самое, что
var x = 42(function () { ... })()
но
var x = 42 ; (function () { ... })()
это то же самое, что
var x = 42; (function () { ... })()
Я написать все JavaScript в стиле без точки с запятой. При записи без точек с запятой в конце каждой строки, из-за автоматической вставки точки с запятой (ASI), есть несколько особых случаев, которые могут "запутать" сначала:
запуск выражения верхнего уровня с помощью оператора, a
(
(открывающая скобка) в этом случае, который как и большинство других операторов, может дальше предыдущей выражение и таким образом подавляет "автоматическую вставку точки с запятой". (Это вообще возникает только при использовании функции самостоятельного вызова.)просто шучу о #2: нет ни одного! (Узнать только одно правило, и Вы тоже можете наслаждаться жизнью без лишних точек с запятой ;-)
Так как я пишу в стиле без точки с запятой я таким образом всегда напишите его как (где функция-выражение может естественно охватывать несколько строки):
;(FunctionExpression)()
на мой дело не в "безопасности" или попытке "поймать ошибку" (честно говоря, если ваш стиль заключается в использовании точек с запятой, и вы забываете точку с запятой, то вы уже создал ошибку в другом месте и писать
;
в начале для "безопасности" - бред сивой кобылы). Нет, в моем случае это делается для последовательность С знания моего выбранного стиля и "зная", что начало строки с оператором может продолжить выражение из предыдущей строки.посмотреть JavaScript: Вставка Точки С Запятой (Все, Что Вам Нужно Знать) для деталей (это, безусловно, лучшая статья, которую я видел по этому вопросу).
удачи в кодировании.
для меня точка с запятой вызывала ошибку в Internet Explorer 8 (или, по крайней мере, это то, что сказал IETester) и препятствовала правильной работе вкладок пользовательского интерфейса.
сообщение об ошибке
Invalid character in jquery.all.ui.js Line: 1. Char: 1
.я наткнулся на точку с запятой совершенно случайно. Когда я удалил
;
С;(function($)
он работал, вроде бы без побочных эффектов или потери функциональности. Я использую Drupal, не знаю, имеет ли это какое-либо отношение к делу.