2010-04-18 27 views
68

¿cuál es la diferencia entre¿Cuál es la diferencia entre estas funciones jQuery ready?

$(function(){ 

}); 

y

$(document).ready(function() { 

}); 
+1

ninguno. o al menos lo dice en el manual. – falstro

+5

Puede leer el primero como "llamar a una función llamada $ y darle la función definida para ejecutar". $ there se refiere a jQuery, que ejecutará la función que le dio cuando esté lista. leer como "crear un objeto jQuery a partir del documento y adjuntarle un eventlistener que ejecute la función que le diste cuando se desencadena por el evento listo". – kontur

+0

Ver mi respuesta a continuación: IE9 los trata de manera diferente. –

Respuesta

51

Nothing whatsoever.

This function behaves just like $(document).ready(), in that it should be used to wrap other $()

Esto se puede ver en el source code:

rootjQuery = jQuery(document); 

... 

} else if (jQuery.isFunction(selector)) { 
    return rootjQuery.ready(selector); 
} 
+35

Hay una diferencia, $ (función() {}) es menos legible (al menos para mi cerebro). –

+3

Estoy de acuerdo con Rosdi: uno es un poco más expresivo acerca de lo que realmente está haciendo, uno es algo más escueto. Prefiero la versión expresiva, pensó que era ligeramente menos eficiente: http://jsperf.com/ready-callback-function-vs-document-ready-function/4 –

+0

También de acuerdo con una observación: es esa falta de expresividad en la versión abreviada que hace que esta sea una pregunta tan popular. – natchiketa

7

$ (función() {}) es un atajo para dom ready

Una función pasada como argumento para el constructor de jQuery está vinculada al evento ready del documento.

2

Uso $(function() {}); porque es más corto. Hasta donde yo sé, no hay diferencia entre las dos formas de hacerlo.

8

Ambos son equivalentes, el primero es una forma abreviada.

+0

¿Está seguro? ¿El primero espera a que se cargue DOM? –

+3

Sí, son lo mismo. – Seth

+0

@KlauByskobHoffmann there equivelant. – Raynos

4

Son efectivamente lo mismo. Ninguna diferencia.


Esta es la manera nativa.

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

Y esta es una abreviatura de la anterior.

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

jQuery source code

+0

Hay un comentario en este hilo - http://stackoverflow.com/questions/7975093/typeerror-undefined-is-not-a-function-evaluating-document - que el uso de la abreviatura puede conducir a 'TypeError : 'undefined' no es una función' errores ocasionalmente. – crmpicco

+0

@crmpicco Excepto que el hilo menciona '$ (documento)', por lo que probablemente se refiera a la taquigrafía '$' para 'jQuery'. – nyuszika7h

14
} else if (jQuery.isFunction(selector)) { 
    return rootjQuery.ready(selector); 
} 

Desde el source

Calling $(document).ready(selector) ahorra unos cuantos si las declaraciones.

Aunque jQuery hace caché $(document) internamente que podría hacer $(f) más rápido.

Benchmarked

+5

+1 para el punto de referencia. – nyuszika7h

+2

Si estamos hablando de ** ese ** nivel de micro-optimización, es posible que desee considerar los 11 bytes adicionales necesarios para transferir la versión explícita ... – lonesomeday

+0

@lonesomeday Bueno, son solo 9 bytes. '$ (d) .ready (f)' frente a '$ (f)' – Raynos

6

le sugiero que lea this. Como puede ver

All three of the following syntaxes are equivalent:

$(document).ready(handler)

$().ready(handler) (this is not recommended)

$(handler)

Así que depende de usted y de lo que prefiera.

+3

'$(). Ready()' no funcionará en jQuery 1.4+. '$()' devuelve una selección vacía en lugar del documento en estas circunstancias. – lonesomeday

+2

@lonesomeday Es por eso que hay un ** (no se recomienda) ** delante de él. – foliveira

7

Los dos son exactamente equivalentes: use la forma que desee.

Dicho esto, yo personalmente siempre uso la forma expandida $(document).ready(function(){}); por la simple razón de que es completamente obvio lo que está haciendo el código. La idea aproximada es la de "código de auto-documentación". Cualquiera que acceda al código más tarde verá de inmediato que el código se ejecutará en el evento documentready. Con la forma abreviada, debes confiar en el lector de tu código para entender el significado.

4

Nos hemos encontrado con situaciones en las que IE9 no ejecuta funciones dentro de $ (function() {}); de la misma manera u horario que $ (document) .ready (function() {});

El problema nos aceleró específicamente al leer información de una cadena de consulta y procesar y mostrar esa información en la pantalla, o usarla para procesar un formulario. IE9 procesaría la información una vez que se almacenó en caché con $ (función(), y un usuario actualizó la página. Pero en la primera ejecución, nada funcionó bien. Sin embargo, una vez que cambiamos de $ (función() {}) a $ (documento) ready(), el problema se solucionó. Hemos cambiado nada más.

así lo esperamos con interés el día en que no tengo que probar IE9 e inferior.

+1

document.ready no está conectado al mismo evento "nativo" para todos los navegadores ... puede obtener uno de estos: [document.DOMContentLoaded] o [window.load] o [document.onreadystatechange]. Supongo que esa es la razón por la que obtienes una acción diferente en IE, supongo (sin verificación) que el $ (documento) .ready (...) no está conectado al mismo evento DOM nativo que $ (función() {}) – foxontherock

Cuestiones relacionadas