Каковы последствия этого фрагмента javascript?

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

jQuery.ui || (function($) {

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


person jrharshath    schedule 23.06.2009    source источник
comment
Первый из ваших вопросов - это дубликат Что делает начальная точка с запятой в библиотеках JavaScript?   -  person Bergi    schedule 11.06.2016
comment
или наоборот? Связанный вами вопрос на несколько месяцев новее, чем этот.   -  person jrharshath    schedule 13.06.2016
comment
Вопрос, который я связал, является каноническим по теме, с лучшими ответами, поэтому я связал его.   -  person Bergi    schedule 13.06.2016


Ответы (4)


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

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

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

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

person James    schedule 23.06.2009
comment
хе-хе, фальшиво, мило. Это отличный способ описать значение, которое оценивается как ложное, мне это нравится. - person Dan F; 23.06.2009
comment
Не мой термин ... Кажется, я слышал это в видео Дуга Крокфорда. - person James; 23.06.2009

Я предполагаю, что ; должен гарантировать, что упаковщики javascript не испортят строку, но это лучшее, что у меня есть.

Логическое или необходимо для того, чтобы jQuery.ui не объявлялся дважды. JavaScript выполняет короткое замыкание, поэтому он не будет оценивать правую часть ||, если левая часть оценивает что-то, что является правда (спасибо, 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 $
person Dan F    schedule 23.06.2009

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

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

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

person Jon Grant    schedule 23.06.2009

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

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

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

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

person Thilo    schedule 23.06.2009