Что является следствием этого бита javascript?

Я смотрел код jQuery UI, и я обнаружил, что каждый файл начинается с такой конструкции:

;jQuery.ui || (function($) {

Мой вопрос: почему существует точка с запятой до jQuery и почему выполняется логическое ИЛИ?

JRH

Ответ 1

Почему существует точка с запятой перед jQuery?

Для обеспечения безопасной конкатенации файлов используется точка с запятой. (библиотеки и компоненты библиотеки часто упаковываются в один файл)

почему выполняется логическое ИЛИ?

Самозапускающаяся анонимная функция в правой части будет выполняться только в том случае, если левая сторона выражения оценивается как значение false. Поэтому, если jQuery.ui уже существует на странице, функция не будет работать. Он работает только тогда, когда jQuery.ui еще не существует.

Ответ 2

Я предполагаю, что ; должен гарантировать, что 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 $

Ответ 3

На английском языке эта строка кода говорит: либо jQuery.ui существует, либо определяет эту функцию...

например. если jQuery.ui не определен, то функция будет создана.

Начальная точка с двоеточием не должна иметь эффекта - она ​​просто ограничивает конец инструкции кода.

Ответ 4

Я думаю, что логическое ИЛИ выполняется для того, чтобы файл был включен (и оценивался) несколько раз, а не сам clobber: если вы снова загрузите его, jQuery.ui будет уже определен, и он не будет что-нибудь.

Файл может быть включен несколько раз по ошибке, если кто-то потерял отслеживание тегов script.

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

ложная точка с запятой не наносит вреда, может отсутствовать точка с запятой.