Каковы последствия этого кусочка JavaScript? - PullRequest
10 голосов
/ 23 июня 2009

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

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

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

JRH

Ответы [ 4 ]

21 голосов
/ 23 июня 2009

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

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

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

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

6 голосов
/ 23 июня 2009

Я предполагаю, что ; должен гарантировать, что упаковщики 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 $
1 голос
/ 23 июня 2009

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

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

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

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

1 голос
/ 23 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...