Я смотрел код пользовательского интерфейса jQuery и обнаружил, что каждый файл начинается с такой конструкции:
jQuery.ui || (function($) {
У меня вопрос: почему перед jQuery
стоит точка с запятой и почему выполняется логическое ИЛИ?
Я смотрел код пользовательского интерфейса jQuery и обнаружил, что каждый файл начинается с такой конструкции:
jQuery.ui || (function($) {
У меня вопрос: почему перед jQuery
стоит точка с запятой и почему выполняется логическое ИЛИ?
почему перед jQuery стоит точка с запятой?
Точка с запятой используется для обеспечения безопасной конкатенации файлов. (библиотеки и библиотечные компоненты часто упаковываются в один файл)
почему выполняется логическое ИЛИ?
Самозапускающаяся анонимная функция с правой стороны будет запускаться только в том случае, если левая часть оператора оценивается как ложное значение. Поэтому, если jQuery.ui
уже существует на странице, функция не запустится. Он запускается только тогда, когда jQuery.ui
еще не существует.
Я предполагаю, что ;
должен гарантировать, что упаковщики javascript не испортят строку, но это лучшее, что у меня есть.
Логическое или необходимо для того, чтобы jQuery.ui
не объявлялся дважды. JavaScript выполняет короткое замыкание, поэтому он не будет оценивать правую часть ||
, если левая часть оценивает что-то, что является правда (спасибо, JP!) em >.
Расшифровка дополнительного синтаксиса: $, переданный анонимной функции, является ссылкой на 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 не определен, функция будет создана.
Начальная точка с запятой не должна иметь никакого эффекта - она просто ограничивает конец оператора кода.
Я думаю, что логическое ИЛИ выполняется, чтобы файл можно было включать (и оценивать) несколько раз, а не сам по себе: если вы загрузите его снова, jQuery.ui будет уже определен, и он ничего не сделает.
Файл мог быть включен несколько раз по ошибке, если кто-то потерял следы тегов скрипта.
Что касается точки с запятой, я могу только догадываться, что это гарантия того, что файл также работает, если включен в другой файл, даже если последний оператор там не заканчивается точкой с запятой.
Поддельная точка с запятой не причиняет вреда, а отсутствующая точка с запятой может.