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


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

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

4 92

4 ответа:

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

Файл A:

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

Файл B:

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

Файл A+B:

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

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

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

Файл B2:

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

и вы получите рабочую сценарий:

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

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

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

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

считают

var x = 42

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

это то же самое, что

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

но

var x = 42

;

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

это то же самое, что

var x = 42;

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

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

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

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

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

;(FunctionExpression)()

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

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

удачи в кодировании.

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

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

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