Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FK.

[Resolvido] Função estranha javascript - jQuery

Recommended Posts

Boa noite, eu tenho uma dúvida besta a respeito de javascript e jQuery, é mais curiosidade mesmo.

Então, olhei a biblioteca jQuery e percebi que começa com um parênteses seguido de uma função literal dai dentro dela toda a biblioteca jQuery, e no final fecha esse parênteses e no final assim ( window );

Como isso funciona ?

 

(function () {

// jQuery

})( window );

 

Além disso, não entendo isso aqui também :

 

(function($) {

//algum código...

})(jQuery);

 

Essa de cima eu sei que é para não haver conflitos, mas o que é isso em relação ao javascript ? Uma função dentro de um parênteses ? Não entendo .. :/

 

Alguém poderia me explicar como funciona esses 2 blocos de código ?

Obrigado, e desculpa pela dúvida besta.. :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

é uma função anônima(sem nome), e autoexecutável.

 

 

leia:

http://wbruno.com.br/blog/2011/07/18/vixi-aprendi-jquery-mas-agora/

 

 

a forma:

(function($) {

//algum código...

})(jQuery);

 

evita 'conflito', pois encapsula o simbolo $, como argumento dessa função. (clousure)

logo, o $ não existe no escopo externo a ela. Externamente se chama jQuery, e dentro se chama $ (por isso evita conflito com quem tá fora dai)

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro código que você passou, ele cria uma closure

(function(){

})

 

E a invoca logo em seguida passando como primeiro parâmetro o objeto window.

(window)

 

Porém creio que o código que você passou está incorreto, o que o jQuery usa é:

(function ($, window, undefined) {
   // jquery code... 
})(jQuery, window);

 

Essa "função dentro de um parênteses" se chama Closure. :seta: https://developer.mozilla.org/en/JavaScript/Guide/Closures

 

Mas porque John Resig (autor da biblioteca) decidiu usar essa "função estranha"?

  • Ele decidiu usar uma Closure para preservar o escopo das variaveis definidas dentro do mesmo, pois variaveis globais = Bad.
  • Passou o objeto do jQuery para o parametro $ para poder usar $ sem se preocupar com possiveis conflitos gerados caso o $ já esteja em uso por outra biblioteca, ou caso tenha sido usado o metódo jQuery.noConflict();
  • Passou o objeto window como o argumento window para limitar o escopo de busca, melhorando a perfomance.
  • E por último, passou nada para a variavel undefined, para ter certeza que undefined é undefined. :P Isso aqui é um bug em algumas implementações do ECMAScript, onde o valor de undefined pode ser trocado por qualquer outro valor, deixando de ser undefined.

 

Material interessante:

http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/

&

http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado aos dois, estou lendo os sites que vocês me passaram.

Mas, uma coisa... Aonde vocês aprendem isso? Eu quero entender mais coisa do javascript, li um livro de javascript e aprendi poucas coisas, manipular DOM, entre outros, mas quero saber mais sobre essa linguagem, mas aonde? :D

Vlw !

 

Outra coisa que me confundo muito, é qual objeto está sendo referenciado quando se usa a clausula this, sei que é "este", mas quem é "este"? asekoseao :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse link tem bastante coisa, muito bem explicada, sobre resolução de variaveis, prototype chain, closures, dentre outras, porém em inglês (mas você já deve conseguir ler :lol:): http://jibbering.com/faq/notes/

 

Tem o site para desenvolvedores da Mozilla: https://developer.mozilla.org/pt-BR/

 

E também o StackOverflow, site onde pessoas fazem perguntas relacionadas à programação, aqui a parte relacionada à javascript, tem várias perguntas interessantes, com respostas mais interessantes ainda: http://stackoverflow.com/questions/tagged/javascript

 

Livros:

JavaScript for Absolute Beginners

Javascript: The Good Parts

Secrets of the javascript Ninja

Pro Javascript Techniques

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, esse site da mozzila é bom, vou pesquisar um pouco, mas não sou muito bom em inglês, to fazendo curso ainda.

De qualquer forma, obrigado !

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.