this
это элемент, $(this)
это объект jQuery, построенный с этим элементом
$(".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);
});
Более глубокий взгляд
this
MDN содержится в контексте выполнения
Область действия относится к текущему контексту исполнения ECMA . Чтобы понять this
, важно понять, как контексты выполнения работают в JavaScript.
контексты исполнения связывают это
Когда элемент управления входит в контекст выполнения (код выполняется в этой области), среда для переменных настраивается (лексическая и переменная среды) - по сути, это устанавливает область для ввода переменных, которые уже были доступны, и область для локальных переменных, которые будут хранится), и связывание this
происходит.
JQuery связывает это
Контексты исполнения образуют логический стек. В результате контексты, находящиеся глубже в стеке, имеют доступ к предыдущим переменным, но их привязки могли быть изменены. Каждый раз, когда jQuery вызывает функцию обратного вызова, он изменяет привязку this с помощью apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
Результатом вызова apply
является то, что внутри функций обратного вызова jQuery this
ссылается на текущий элемент , используемый функцией обратного вызова.
Например, .each
обычно используется функция обратного вызова .each(function(index,element){/*scope*/})
. В этом смысле this == element
это правда.
Обратные вызовы jQuery используют функцию apply, чтобы связать вызываемую функцию с текущим элементом. Этот элемент происходит из массива элементов объекта jQuery. Каждый созданный объект jQuery содержит массив элементов, которые соответствуют API селектора jQuery, который использовался для создания экземпляра объекта jQuery.
$(selector)
вызывает функцию jQuery (помните, что $
это ссылка на jQuery
code:) window.jQuery = window.$ = jQuery;
. Внутри функция jQuery создает экземпляр функционального объекта. Так что, хотя это может быть не сразу очевидно, используется $()
внутреннее использование new jQuery()
. Часть конструкции этого объекта jQuery - найти все совпадения селектора. Конструктор также будет принимать HTML-строки и элементы . Когда вы переходите this
к конструктору jQuery, вы передаете текущий элемент для объекта jQuery, который будет создан . Затем объект jQuery содержит массивоподобную структуру элементов DOM, соответствующих селектору (или только один элемент в случае this
).
После создания объекта jQuery API jQuery теперь доступен. Когда вызывается функция API jQuery, она будет внутренне выполнять итерацию по этой массивоподобной структуре. Для каждого элемента в массиве он вызывает функцию обратного вызова для API, связывая обратные вызовы this
с текущим элементом. Этот вызов можно увидеть в фрагменте кода выше, где obj
это массивоподобная структура и i
итератор, используемый для позиции в массиве текущего элемента.