2010-05-28 20 views
23

¿Las siguientes suposiciones son precisas?jquery declaración de función anónima significados

1) ejecutar inmediatamente

(function(){ 
})(); 

2) se ejecutan en documento listo

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

3) taquigrafía para el documento listo

$(function(){ 
}); 

4) taquigrafía alternativa en el documento listo para evitar conflictos de guiones cruzados

(function($) { 
})(jQuery); 
+1

El último se usa a menudo para definir complementos. –

+0

Editó su numeración para darle un formato de código más agradable, la marca no le gusta el código directamente debajo de los números por cualquier razón :) –

+0

Cheers Nick, nice one –

Respuesta

19

Sí sus definiciones son correctas, por primera 3 :)

Aunque, a menos que necesite un cierre, una declaración se ejecutará inmediatamente, no hay razón para envolverlo como # 1 tiene (sin duda hay un montón de los tiempos válidos que necesita un cierre, simplemente observando si no ... es superfluo).

Número 4 sin embargo, no es correcto, (function($) { })(jQuery); no está vinculado a ningún evento, es solo un cierre de manera que $ === jQuery dentro de ella, para que pueda utilizar el $ atajo:

(function($) { 
    //You may use $ here instead of jQuery and it'll work...even if $ means 
    //something else outside of this closure, another library shortcut for example 
})(jQuery); 
+0

Respuesta muy informativa. ¿El número 4 se usa principalmente en caso de que se haya sobrescrito $ en el alcance global desde que se cargó el archivo jQuery? –

+4

@ yaya3 - Sí, normalmente como resultado de ['.noConflict()'] (http://api.jquery.com/jQuery.noConflict/) para permitir que otra biblioteca controle '$'. Sin embargo, si desea 'document.ready' y no hay conflictos, también hay una versión corta, jQuery se pasa a sí mismo como un parámetro para el manejador listo, por lo que' jQuery (document) .ready (function ($) {}); 'o el 'jQuery más corto (función ($) {});' está recibiendo '$' pasado, más local así '$ === jQuery' adentro también ... y el código se activa en' document.ready', agradable y limpio. O use cualquier otro nombre :), p. 'jQuery (function (myVar) {myVar ('# myElem'). hide();});' –

+0

Impresionante, he aprendido mucho aquí. Gracias –

9

Aquí está el # 4 se estaban buscando:

jQuery(function ($) { 
}); 

se ejecutará en document.ready, dentro de un espacio de nombres, y con jQuery definido como $.

+0

manera brillante de escribir esto que nos dará el poder de $ sin la desventaja. – rncrtr

Cuestiones relacionadas