2012-07-09 6 views
9

estoy tratando de entender si hay alguna diferencia entre:

(function($){ 

... 

})(jQuery); 

vs

(function($){ 

... 

})($); 

Nota del jQuery fue sustituido por un $. ¿Esta bien? ¿No se usa en ninguna parte porque no puede funcionar? Funciona, pero tal vez no es estándar? ¿Alguien puede explicar esto si es un error o si está bien? Gracias

+0

Finalice su resumen con un punto y coma ';'. De lo contrario, te encontrarás con problemas: '(...) (...) (...) (...)'. –

+1

El verdadero objetivo del primer código es poder usar '$' para hacer referencia a jQuery dentro de la función cuando jQuery está en [modo no conflictivo] (http://api.jquery.com/jQuery.noConflict/). El segundo no funcionará como se espera si otro marco usa el espacio de nombres '$' en el alcance global. –

Respuesta

15

Otros marcos de JavaScript también pueden usar $ como acceso directo. Para garantizar que $ es jQuery dentro de su función, pase jQuery y no $ al final. Este tipo de definir una función o "área de código" es asegurarse de que $ realmente es jQuery al mezclar marcos.

1

Hay.
$ es solo un atajo para jQuery. No define la lib, por lo tanto, también puede ser utilizada por otros frameworks.
llevar este caso en consideración:

// remove the jQuery shortcut ($ === undefined) 
var j = jQuery.noConflict(); 
// redefine the dollar sign 
window.$ = function(){ 
    // some other plugin 
} 

// case A 
(function($){ 
    alert(jQuery === $);//true 
})(jQuery) 

// case B 
(function($){ 
    alert(jQuery === $);//false 
})($) 
1

Su segundo ejemplo es redundante. Si usted puede pasar jQuery utilizando $ continuación $ ya está jQuery, es decir, que podría haber simplemente escribió:

(function(){ 
    $('#selectme'); 
})(); 

El primer ejemplo, es sólo vale la pena si desea utilizar jQuery en modo noConflict, pero todavía utilizar el $ a referencia jQuery en fragmentos seleccionados de código. De lo contrario, técnicamente ni siquiera necesita un cierre (aunque los cierres son una buena práctica por muchas otras razones).

+0

El ejemplo NO es redundante. Puede haber algunos casos en los que no debe confiar en el alcance global y sería mejor mantener la variable deseada en el ámbito de su función. Considere este ejemplo: '(function() {setTimeout (function() {alert ($ === jQuery);}, 1000);})(); $ = 13;' y luego '(function ($) {setTimeout (función() {alerta ($ === jQuery);}, 1000);}) ($); $ = 13; '. Puede ver que el segundo ejemplo da el resultado deseado –

6

Muchas bibliotecas de JavaScript usan $ como una función o nombre de variable, al igual que jQuery. En el caso de jQuery, $ es solo un alias para jQuery, por lo que toda la funcionalidad está disponible sin usar $. Si tenemos que utilizar otra biblioteca JavaScript junto con jQuery, podemos devolver el control de $ vuelta a la otra biblioteca con una llamada a $ .noConflict():

http://api.jquery.com/jQuery.noConflict/

En "sin confict" modo, el $ shortcut no está disponible y se utiliza jQuery. Por ejemplo:

$(document).ready(function(){ 
    $(#somefunction) ... 
}); 

se convierte en:

jQuery(document).ready(function(){ 
    jQuery(#somefunction) ... 
}); 

Con el fin de utilizar el valor predeterminado jQuery acceso directo de $, puede utilizar la siguiente envoltura alrededor de su código:

jQuery(document).ready(function($) { 
    // $() will work as an alias for jQuery() inside of this function 
}); 

Eso wrapper haga que su código se ejecute cuando la página termine de cargarse, y $ funcionará para llamar a jQuery.Si, por alguna razón, usted quiere que su código a ejecutar de inmediato (en lugar de esperar a que el evento ready DOM), a continuación, puede utilizar este método de envoltura en su lugar:

(function($) { 
    // $() will work as an alias for jQuery() inside of this function 
})(jQuery); 

Buena lectura:http://codex.wordpress.org/Function_Reference/wp_enqueue_script#jQuery_noConflict_wrappers

Además si agudo:

What does $ mean in jQuery?

Esto debería ayudar a calmar la sed :) ¡Espero que esto ayude!

+0

No necesita usar 'document' y' .ready() 'Mi favorito es:' jQuery ($ => {/ * code * /}) ' – Endless

Cuestiones relacionadas