2011-08-06 10 views
6

en ambos casos son la misma cosa, es decir, formas de decir documento listo:Diferentes formas de decir que el documento está listo en jQuery?

$(function() { 
    // 
}); 

y

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

o hay una diferencia entre los dos, si es así, cuándo debo usar el que?

+2

Se utiliza el último cuando se trabaja con varias bibliotecas JS juntos . –

+0

Es posible que desee ver http://stackoverflow.com/questions/1388043/different-forms-of-document-ready – coreyward

+0

@Briedis, por lo que el uso de la segunda en un complemento minimizará las posibilidades de conflicto con otras bibliotecas? – Sergio

Respuesta

9

El primero es un atajo para .ready().

El segundo es simplemente inválido ya que está tratando de llamar a un objeto no exigible.

Probablemente esto significaba:

// v--------no $ at the beginning 
    (function($) { 

     // simply a new lexical environment with a 
     //  local $ parameter pointing to jQuery 

    })(jQuery); 

... aunque no tiene nada que ver con DOM listo.

hay una variación en su primer ejemplo que combina ambos:

jQuery(function($) { 

    // DOM ready, and creates a local $ parameter pointing to jQuery 

}); 
1

Ambos no son iguales.

El primer bloque de código se usa para ejecutar la función en el documento listo donde se usa el segundo bloque de código cuando queremos ejecutar el bloque de código inmediatamente sin esperar a que se cargue el resto del código. Pero hay un error en su segunda parte del código. Debería ser como a continuación.

(function($) { 
    // 
})(jQuery); 
0

Ésta es incorrecta:

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

Estás pasando una función para $(...), a continuación, llamar al resultado. Sin embargo, el resultado de $(...) es un objeto jQuery, que no es una función. Es posible que lo ve mejor así:

$(

    function($) { 
     // 
    } 

) 

(jQuery); 

En general, hay tres versiones de document.ready, que son todos iguales entre sí:

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

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

$().ready(function() {...}); 
+0

'$()' no funcionará en las versiones recientes de jQuery (> = 1.4, IIRC), ya que esas versiones lo tratan como la selección vacía, en lugar de seleccionar el elemento del documento. Es mejor evitarlo – lonesomeday

+1

@lonesomeday: Probablemente tengas razón en que es mejor evitarlo (porque oficialmente no es compatible), pero funciona porque la función '.ready()' de jQuery ignora actualmente el 'documento 'que le pasas. '$ .fn.ready (...' y '$ ('MooTools'). ready (func ...' también funcionan, pero de nuevo no son compatibles. – user113716

+0

@patrick dw: No estoy seguro de si son 'incompatibles' "ya que incluso los documentos dicen que pueden ser utilizados (sin embargo, se agregó 'no recomendado'). – pimvdb

Cuestiones relacionadas