2009-06-23 9 views
10

yo estaba buscando en el código de interfaz de usuario jQuery, y me encontré con que cada archivo comienza con una construcción como esta:¿Cuál es la consecuencia de este bit de javascript?

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

Mi pregunta es: ¿por qué hay un punto y coma antes jQuery, y por qué es el OR lógico que se realiza ?

JRH

+0

La primera de sus preguntas es un duplicado de [¿Qué hace el punto y coma principal en las bibliotecas de JavaScript?] (Http://stackoverflow.com/q/1873983/1048572) – Bergi

+0

o al revés? La pregunta que vinculó es unos meses más nueva que esta ... – jrharshath

+0

La pregunta que he vinculado es la canónica sobre el tema, con mejores respuestas, es por eso que la vinculé. – Bergi

Respuesta

21

¿por qué hay un punto y coma antes de jQuery?

El punto y coma está ahí para garantizar la concatenación segura de archivos. (las bibliotecas y los componentes de la biblioteca se empaquetan con frecuencia en un único archivo)

¿por qué se realiza el O lógico?

La función anónima de invocación automática en el lado derecho solo se ejecutará si el lado izquierdo de la declaración se evalúa como un valor falsey. Entonces, si jQuery.ui ya existe en la página, entonces la función no se ejecutará.Solo se ejecuta cuando jQuery.ui aún no existe.

+2

jeje, "falsey", agradable. Esa es una excelente manera de describir un valor que se evalúa como falso, me gusta. –

+1

No es mi término ... Creo que lo escuché en un video de Doug Crockford. – James

1

En Inglés, esa línea de código dice: o bien existe jQuery.ui, o definir esta función ...

P. ej si jQuery.ui no está definido, entonces la función será creada.

El punto y coma inicial no debería tener ningún efecto, simplemente delimita el final de una declaración de código.

1

Creo que se está haciendo el OR lógico para permitir que el archivo se incluya (y evalúe) varias veces, y no se bloquee: si lo vuelve a cargar, jQuery.ui ya estará definido, y no hacer nada.

El archivo podría incluirse varias veces por error si alguien ha perdido la pista de las etiquetas de secuencia de comandos.

En cuanto al punto y coma, solo puedo adivinar que esto es una salvaguarda para asegurarme de que el archivo también funciona si está incluido en otro archivo, incluso si la última declaración no está terminada por un punto y coma.

Un punto y coma falso no hace daño, puede que falte un punto y coma.

6

Supongo que el ; es para asegurar que los empacadores de Javascript no arruinen la línea, pero eso es lo mejor que tengo.

La lógica o está allí para asegurarse de que jQuery.ui no se declare dos veces. JavaScript hace cortocircuito, por lo que no evaluará el lado derecho de || si el lado izquierdo se evalúa como algo que es truthey(gracias JP!).

desciframiento de la sintaxis de bonificación, que $ que se transfiere a la función anónima es la referencia a jQuery. Tuviera que desplazarse hasta el fondo de la página antes de que uno hace clic :-)

tanto, aquí está una versión desglosado de la línea anterior

;    // 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 $ 
Cuestiones relacionadas