¿cuál es la diferencia entre¿Cuál es la diferencia entre estas funciones jQuery ready?
$(function(){
});
y
$(document).ready(function() {
});
¿cuál es la diferencia entre¿Cuál es la diferencia entre estas funciones jQuery ready?
$(function(){
});
y
$(document).ready(function() {
});
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);
}
Hay una diferencia, $ (función() {}) es menos legible (al menos para mi cerebro). –
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 –
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
$ (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.
Uso $(function() {});
porque es más corto. Hasta donde yo sé, no hay diferencia entre las dos formas de hacerlo.
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
});
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
@crmpicco Excepto que el hilo menciona '$ (documento)', por lo que probablemente se refiera a la taquigrafía '$' para 'jQuery'. – nyuszika7h
} 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.
+1 para el punto de referencia. – nyuszika7h
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
@lonesomeday Bueno, son solo 9 bytes. '$ (d) .ready (f)' frente a '$ (f)' – Raynos
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.
'$(). Ready()' no funcionará en jQuery 1.4+. '$()' devuelve una selección vacía en lugar del documento en estas circunstancias. – lonesomeday
@lonesomeday Es por eso que hay un ** (no se recomienda) ** delante de él. – foliveira
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 document
ready
. Con la forma abreviada, debes confiar en el lector de tu código para entender el significado.
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.
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
ninguno. o al menos lo dice en el manual. – falstro
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
Ver mi respuesta a continuación: IE9 los trata de manera diferente. –