2010-11-12 11 views
5

Intenté googlear, pero a Google no parece importarle paréntesis ...¿Qué significa cuando una función termina con}) (jQuery) ;?

+4

http://stackoverflow.com/questions/3458283/in-javascript-what-does-this-syntax-mean y http://stackoverflow.com/questions/2309614/what-does-this-javascript-jquery -sintant-mean SO tiene su propia búsqueda. Encontré estas respuestas usando el título de tu pregunta. – user113716

+0

bueno, usted hizo esta pregunta, todos usamos esto y no sabemos lo que hace. Lo tengo clarificado ahora. – kobe

+1

@gov - Esta pregunta se hace todo el tiempo. Aquí hay otro: http://stackoverflow.com/questions/2937227/jquery-what-does-function-jquery-mean y otro: http://stackoverflow.com/questions/2976089/can-someone-explain-what-the -syntax-means-when-defining-a-jquery-plugin y otro: http://stackoverflow.com/questions/2464635/what-does-function-jquery-do-mean – user113716

Respuesta

3

Si ve esto:

(function($) { 
    // ...code using $... 
})(jQuery); 

que está haciendo dos cosas:

  1. Definición de una función anónima que utiliza $ como su referencia a jQuery.
  2. Llamándolo, pasando jQuery.

Se podía hacerlo de esta manera:

function foo($) { 
    // ...code using $... 
} 
foo(jQuery); 

... pero que crea un símbolo innecesario.

Todo esto se debe a que jQuery tiene el símbolo jQuery y el símbolo $, pero no es raro que las personas que utilizan jQuery.noConflict() para contar jQuery para volver $ volver a lo que era cuando jQuery cargado, porque un par de otras bibliotecas populares (Prototype y MooTools, por nombrar dos) usan $ y esto permite que alguien use esas bibliotecas y jQuery juntas. Pero aún puede usar $ dentro de su función, porque el argumento sombrea lo que significa ese símbolo fuera de la función.

+0

¿por qué utilizar una función anónima? Si es anónimo y no reutilizable, ¿por qué hacerlo funcionar? ¿por qué no usar expresiones? – polyhedron

+1

@polyhedron: esta función se ejecuta solo una vez, por lo que no es necesario un nombre. El punto T.J.está haciendo que '$' se convierta en una variable local dentro de la función, donde hace referencia a la variable global 'jQuery'. Si tiene '$' como variable global, habrá un conflicto si otra biblioteca usa el mismo nombre de variable global. De esta manera es privado y, por lo tanto, está protegido. – user113716

+1

@polyhedron: en JavaScript, las funciones * only * pueden crear un nuevo ámbito, por lo que debe usar una función si desea crear una variable privada. –

1

Básicamente, invoca automáticamente la función anónima/lambda definida y proporciona la referencia jQuery.

Más o menos lo mismo que functionCall(jQuery) excepto que lo define y lo invoca en la misma línea/expresión.

1

lo general, estos son de la forma ...

(function($) { 
    // do something with $ 
})(jQuery); 

Lo que significa que la función está haciendo algo con jQuery (que define function(a) {...} y luego pasa jQuery en tan a), pero quiere poder para usar $ en su lugar jQuery dentro de la función.

Esto permite cosas como $(this) y así sucesivamente incluso si jQuery se invoca en el modo n-Conflicto (y por lo tanto $ no se referiría a jQuery normalmente).

Cuestiones relacionadas