Entiendo los cierres de JavaScript, y he visto esto hecho en JS nativo:
(function () { // all JS code here })();Pero, ¿qué hace agregar la especia jQuery?
(function ($) { // all JS code here })(jQuery);Cuando veas:
(function() { // all JS code here })(); Se conoce como función anónima de autoinvocación . La función se ejecuta tan pronto como se analiza debido a la adición de () al final (así es como se ejecutan las funciones js).
Tenga en cuenta que las llaves externas adicionales son solo una convención, también podría escribirlo así:
function() { // all JS code here }();Pero esa convención se usa mucho en todas partes y debe apegarse a ella.
(function($) { // all JS code here })(jQuery); Aquí, $ se asigna al objeto jQuery para que pueda usar $ en lugar de la palabra clave jQuery . También podrías poner algún otro personaje allí también:
(function(j) { // all JS code here })(jQuery); Aquí, j se asigna a un objeto jQuery en su lugar.
Tenga en cuenta también que los argumentos especificados para la función de autoinvocación permanecen dentro del alcance de esa función y no entran en conflicto con el alcance o las variables externas.
Había escrito un artículo sobre el tema, por favor échale un vistazo:
Es una forma de asignar jQuery a $ de manera que no todo el código en una página lo vea.
Tal vez tenga un script existente que usa jQuery que le gusta reutilizar, pero también usa un prototipo que también usa $ en la misma página.
Al envolver cualquier jQuery usando código en esa construcción, redefine $ a jQuery para la parte contenida sin entrar en conflicto con otro código en la página.
(function() { // all JS code here })();Es una expresión de función invocada inmediatamente ( IIFE ), pronunciada "dudosa". Algunas personas también las llaman "funciones autoejecutables anónimas" o simplemente "funciones autoejecutables".
(function(aParameter) { alert(aParameter); // will alert "an argument" })("an argument");Aquí hay un IIFE que toma el parámetro 'aParameter' y se pasa el argumento "an argument".
(function($){ alert($(window).jquery); // alert the version of jQuery })(jQuery);Este es similar, pero "jQuery" (LA instancia del objeto jQuery) es el argumento del IIFE, y en este caso, jQuery se pasa como el parámetro '$'. De esta forma, simplemente tecleando '$', el cuerpo del IIFE tiene acceso a jQuery y sus miembros. Esta es una convención común de jQuery, y es común que las personas que escriben complementos de jQuery mantengan esta convención de esta manera.
El código anterior no solo mantiene la convención jQuery, sino que también garantiza que ni usted ni nadie más pueda romper accidentalmente esa convención. Por ejemplo, tome el siguiente código:
var $ = function() { alert('foo'); }Este código convierte '$' en algo que definitivamente no es jQuery. Si alguien hizo esto en algún otro código fuera del código de su complemento, y luego no pasó explícitamente jQuery como '$' a su complemento, entonces no podría usar '$' como jQuery como lo hace normalmente.