Я смотрел код jQuery UI, и я обнаружил, что каждый файл начинается с такой конструкции:
;jQuery.ui || (function($) {
Мой вопрос: почему существует точка с запятой до jQuery
и почему выполняется логическое ИЛИ?
JRH
Я смотрел код jQuery UI, и я обнаружил, что каждый файл начинается с такой конструкции:
;jQuery.ui || (function($) {
Мой вопрос: почему существует точка с запятой до jQuery
и почему выполняется логическое ИЛИ?
JRH
Почему существует точка с запятой перед jQuery?
Для обеспечения безопасной конкатенации файлов используется точка с запятой. (библиотеки и компоненты библиотеки часто упаковываются в один файл)
почему выполняется логическое ИЛИ?
Самозапускающаяся анонимная функция в правой части будет выполняться только в том случае, если левая сторона выражения оценивается как значение false. Поэтому, если jQuery.ui
уже существует на странице, функция не будет работать. Он работает только тогда, когда jQuery.ui
еще не существует.
Я предполагаю, что ;
должен гарантировать, что javascript-упаковщики не испортят линию, но это лучшее, что у меня есть.
Логично или нужно убедиться, что jQuery.ui
не объявляется дважды. JavaScript делает короткое замыкание, поэтому он не будет оценивать правую сторону ||
, если левая сторона оценивает что-то, что truthey (спасибо JP!).
Бонусная синтаксическая расшифровка, что $, переданная анонимной функции, является ссылкой на jQuery. Мне пришлось прокручивать страницу до того, как ее нажали: -)
Итак, здесь сломанная версия строки выше
; // extra semi colon to ensure correct concatenation and minifying
jQuery.ui // check if the variable called jQuery.ui is truthey
|| // OR if jQuery.ui isn't defined
(function($) {...})(jQuery); // define and execute an anonymous function
// passing in the conflict safe jQuery
// as the parameter called $
На английском языке эта строка кода говорит: либо jQuery.ui существует, либо определяет эту функцию...
например. если jQuery.ui не определен, то функция будет создана.
Начальная точка с двоеточием не должна иметь эффекта - она просто ограничивает конец инструкции кода.
Я думаю, что логическое ИЛИ выполняется для того, чтобы файл был включен (и оценивался) несколько раз, а не сам clobber: если вы снова загрузите его, jQuery.ui будет уже определен, и он не будет что-нибудь.
Файл может быть включен несколько раз по ошибке, если кто-то потерял отслеживание тегов script.
Что касается точки с запятой, я могу только догадываться, что это является гарантией того, что файл также работает, если он включен в другой файл, даже если последний оператор не заканчивается точкой с запятой.
ложная точка с запятой не наносит вреда, может отсутствовать точка с запятой.