this
é o elemento, $(this)
é o objeto jQuery construído com esse elemento
$(".class").each(function(){
//the iterations current html element
//the classic JavaScript API is exposed here (such as .innerHTML and .appendChild)
var HTMLElement = this;
//the current HTML element is passed to the jQuery constructor
//the jQuery API is exposed here (such as .html() and .append())
var jQueryObject = $(this);
});
Um olhar mais profundo
this
MDN está contido em um contexto de execução
O escopo refere-se ao atual ECMA do contexto de execução . Para entender this
, é importante entender como os contextos de execução operam em JavaScript.
contextos de execução vinculam isso
Quando o controle entra em um contexto de execução (o código está sendo executado nesse escopo), o ambiente para variáveis é configurado (ambientes lexicais e variáveis - essencialmente, isso configura uma área para entrada de variáveis que já estavam acessíveis e uma área para variáveis locais a serem armazenada) e a ligação de this
ocorre.
O jQuery liga isso
Os contextos de execução formam uma pilha lógica. O resultado é que contextos mais profundos na pilha têm acesso a variáveis anteriores, mas suas ligações podem ter sido alteradas. Toda vez que o jQuery chama uma função de retorno de chamada, ele altera essa ligação usando o apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
O resultado da chamada apply
é que, dentro das funções de retorno de chamada do jQuery, this
refere-se ao elemento atual que está sendo usado pela função de retorno de chamada.
Por exemplo, em .each
, a função de retorno de chamada normalmente usada permite .each(function(index,element){/*scope*/})
. Nesse escopo, this == element
é verdade.
Os retornos de chamada do jQuery usam a função apply para vincular a função que está sendo chamada com o elemento atual. Este elemento vem da matriz de elementos do objeto jQuery. Cada objeto jQuery construído contém uma matriz de elementos que correspondem à API jQuery do seletor usada para instanciar o objeto jQuery.
$(selector)
chama a função jQuery (lembre-se de que $
é uma referência a jQuery
, code window.jQuery = window.$ = jQuery;
:). Internamente, a função jQuery instancia um objeto de função. Portanto, embora possa não ser imediatamente óbvio, use $()
internamente new jQuery()
. Parte da construção desse objeto jQuery é encontrar todas as correspondências do seletor. O construtor também aceitará strings e elementos html . Quando você passa this
para o construtor jQuery, está passando o elemento atual para um objeto jQuery a ser construído . O objeto jQuery então contém uma estrutura de matriz dos elementos DOM que correspondem ao seletor (ou apenas o elemento único no caso de this
).
Depois que o objeto jQuery é construído, a API do jQuery agora é exposta. Quando uma função API jQuery é chamada, ela itera internamente sobre essa estrutura semelhante a uma matriz. Para cada item da matriz, ele chama a função de retorno de chamada para a API, vinculando os retornos de chamada this
ao elemento atual. Essa chamada pode ser vista no snippet de código acima, onde obj
está a estrutura semelhante à matriz e i
é o iterador usado para a posição na matriz do elemento atual.