2010-02-12 24 views
8

¿Alguna diferencia entre estas dos afirmaciones?JQuery: ¿Cuál es la diferencia entre estas dos afirmaciones?

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

$(function() { 
    // Code 
}); 
+0

Por favor, sea más preciso. – Gumbo

+0

Uh ... ¿están escritos de manera diferente? –

+1

+1 Buena y válida pregunta de alguien que ha visto ambas cosas y no entendió la diferencia (o la falta de ella). – user113716

Respuesta

6

En la resolución, no hay diferencia, son equivalentes

A partir del código fuente pertinente

jQuery = window.jQuery = window.$ = function(selector, context) { 
    // The jQuery object is actually just the init constructor 'enhanced' 
    return new jQuery.fn.init(selector, context); 
} 

jQuery.fn = jQuery.prototype = { 
init: function(selector, context) { 

    /* .... irrelevant code.... */ 

    // HANDLE: $(function) 
    // Shortcut for document ready 
    else if (jQuery.isFunction(selector)) 
     return jQuery(document).ready(selector);  
    } 
} 
+0

+1 - Estaba demasiado vago para buscar esto. :) – ChaosPandion

+0

Acabo de tenerlo abierto delante de mí :) –

+0

Equivalente en efecto, y en este momento, pero no son exactamente iguales (obviamente). Uno explícitamente solicita que una función se vincule como un controlador de eventos al evento "listo", y la otra es una solicitud menos específica para ejecutar algo en el momento "listo", sin fijarlo explícitamente específicamente en el evento "listo". – Pointy

0

¿Se refiere a:

$(function() 
{ 
    /* ... */ 
}); 

Ellos son equivalentes en jQuery. El último es la abreviatura de lo primero.

1

Si se refiere a

$(document).ready(function() {/* code here */}); 

y

$(function() {/* code here */}); 

entonces no hay diferencia entre los dos. Este último es solo un atajo que hace lo mismo que el primero.

1

Para todos los efectos, estas dos declaraciones hacen lo mismo. Internamente, sin embargo, el segundo llamará al primero.

1

Creo que es importante señalar que la línea oficial de jQuery es que la segunda sintaxis:

$(function() { 
    // code here 
}); 

es el preferido. ¿Por qué? Porque ofrece la posibilidad de que el Sr. Resig & Co. obtenga una nueva forma brillante de realizar la inicialización bajo carga que es mucho mejor que usar el evento "listo". Si hacen eso, y usted usa la forma más simple (segunda) de hacer las cosas, entonces su código se beneficiará inmediatamente de la mejora sin necesidad de cambiar nada. Si usa el enlace explícito para el evento "listo", se mantendrá con ese enfoque hasta que lo modifique.

+0

Creo que es muy probable que si se encuentra una forma mejor de ejecutar el código cuando el DOM se haya cargado, el equipo opte por cambiar el código en el evento listo y aún delegar '$ (función() {});' lo. –

Cuestiones relacionadas