this
es el elemento, $(this)
es el objeto jQuery construido con ese 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);
});
Una mirada más profunda
this
MDN está contenido en un contexto de ejecución
El alcance se refiere al contexto de ejecución actual ECMA . Para comprender this
, es importante comprender la forma en que funcionan los contextos de ejecución en JavaScript.
contextos de ejecución vinculan esto
Cuando el control ingresa en un contexto de ejecución (el código se está ejecutando en ese ámbito), se configura el entorno para las variables (Entornos léxicos y variables - esencialmente esto establece un área para que ingresen las variables que ya eran accesibles, y un área para que las variables locales sean almacenado), y se this
produce la unión de .
jQuery une esto
Los contextos de ejecución forman una pila lógica. El resultado es que los contextos más profundos en la pila tienen acceso a las variables anteriores, pero sus enlaces pueden haber sido alterados. Cada vez que jQuery llama a una función de devolución de llamada, altera el enlace mediante apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
El resultado de la llamada apply
es que dentro de las funciones de devolución de llamada jQuery, se this
refiere al elemento actual que está utilizando la función de devolución de llamada.
Por ejemplo, en .each
, la función de devolución de llamada comúnmente utilizada permite .each(function(index,element){/*scope*/})
. En ese ámbito, this == element
es cierto.
Las devoluciones de llamada de jQuery utilizan la función de aplicación para vincular la función que se llama con el elemento actual. Este elemento proviene de la matriz de elementos del objeto jQuery. Cada objeto jQuery construido contiene una matriz de elementos que coinciden con la API jQuery del selector que se utilizó para crear una instancia del objeto jQuery.
$(selector)
llama a la función jQuery (recuerde que $
es una referencia a jQuery
, código:) window.jQuery = window.$ = jQuery;
. Internamente, la función jQuery crea una instancia de un objeto de función. Entonces, si bien puede no ser inmediatamente obvio, el uso $()
interno lo utiliza new jQuery()
. Parte de la construcción de este objeto jQuery es encontrar todas las coincidencias del selector. El constructor también aceptará cadenas y elementos html . Cuando pasa this
al constructor jQuery, está pasando el elemento actual para que se construya un objeto jQuery . El objeto jQuery contiene una estructura tipo matriz de los elementos DOM que coinciden con el selector (o solo el elemento individual en el caso dethis
).
Una vez que se construye el objeto jQuery, la API jQuery ahora está expuesta. Cuando se llama a una función jQuery api, iterará internamente sobre esta estructura tipo matriz. Para cada elemento de la matriz, llama a la función de devolución de llamada para la API, vinculando las devoluciones de llamada this
al elemento actual. Esta llamada se puede ver en el fragmento de código anterior donde obj
está la estructura tipo matriz, yi
es el iterador utilizado para la posición en la matriz del elemento actual.