É a seguinte forma abreviada de $(document).ready
?
(function($){ //some code })(jQuery);
Eu vejo esse padrão muito usado, mas não consigo encontrar nenhuma referência a ele. Se for uma forma abreviada de $(document).ready()
, existe alguma razão específica para que isso não funcione? Nos meus testes parece sempre triggersr antes do evento pronto.
A abreviação de $(document).ready(handler)
é $(handler)
(onde handler
é uma function). Veja aqui
O código em sua pergunta não tem nada a ver com .ready()
. Em vez disso, é uma expressão de function invocada imediatamente (IIFE) com o object jQuery como seu argumento. Sua finalidade é restringir o escopo de pelo menos a variável $
ao seu próprio bloco para que não cause conflitos. Você normalmente vê o padrão usado pelos plug-ins do jQuery para garantir que $ == jQuery
.
A taquigrafia é:
$(function() { // Code here });
A taquigrafia correta é esta:
$(function() { // this behaves as if within document.ready });
O código que você postou …
(function($){ //some code })(jQuery);
… Cria uma function anônima e a executa imediatamente com jQuery
sendo passada como arg $
. Tudo o que efetivamente faz é pegar o código dentro da function e executá-lo como normal, já que $
já é um alias para jQuery
. : D
Isso não é uma forma abreviada de $(document).ready()
.
O código que você publicou coloca o código interno e torna o jQuery disponível como $
sem poluir o namespace global. Isso pode ser usado quando você quiser usar o protótipo e o jQuery em uma página.
Documentado aqui: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression
Essas linhas específicas são o wrapper usual para plugins do jQuery:
“… para garantir que o seu plug-in não colida com outras bibliotecas que possam usar o cifrão, é uma prática recomendada passar o jQuery a uma function de autoexecução (fechamento) que o mapeia para o cifrão para que ele possa ‘ t ser sobrescrito por outra biblioteca no escopo de sua execução. ”
(function( $ ){ $.fn.myPlugin = function() { // Do your awesome plugin stuff here }; })( jQuery );
O atalho seguro para multi-estrutura para pronto é:
jQuery(function($, undefined) { // $ is guaranteed to be short for jQuery in this scope // undefined is provided because it could have been overwritten elsewhere });
Isso ocorre porque o jQuery não é o único framework que usa as variables $
e undefined
O que sobre isso?
(function($) { $(function() { // more code using $ as alias to jQuery // will be fired when document is ready }); })(jQuery);