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);
});
深入了解
thisMDN 包含在执行上下文中
范围是指当前的Execution ContextECMA。为了理解this,理解执行上下文在 JavaScript 中的运行方式很重要。
执行上下文绑定 this
当控制进入执行上下文(代码在该范围内执行)时,变量的环境被设置(词法和变量环境 - 本质上,这为变量设置了一个已经可以访问的区域,以及一个用于本地的区域要存储的变量),并发生this的绑定。
jQuery 绑定 this
执行上下文形成一个逻辑堆栈。结果是堆栈中更深的上下文可以访问以前的变量,但它们的绑定可能已被更改。 每次 jQuery 调用回调函数时,它都会使用 applyMDN 更改 this 绑定。
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 对象都包含一个元素数组,这些元素与用于实例化 jQuery 对象的 selectorjQuery API 匹配。
$(selector) 调用 jQuery 函数(请记住,$ 是对 jQuery 的引用,代码:window.jQuery = window.$ = jQuery;)。在内部,jQuery 函数实例化了一个函数对象。所以虽然它可能不是很明显,但在内部使用$() 会使用new jQuery()。这个 jQuery 对象的部分构造是查找选择器的所有匹配项。构造函数还将接受 html 字符串和元素。 当您将this 传递给 jQuery 构造函数时,您将传递用于构造 jQuery 对象的当前元素。然后,jQuery 对象包含与选择器匹配的 DOM 元素的类数组结构(或者在 this 的情况下仅包含单个元素)。
一旦构造了 jQuery 对象,jQuery API 现在就暴露出来了。当调用 jQuery api 函数时,它将在内部迭代这个类似数组的结构。对于数组中的每一项,它都会调用 api 的回调函数,将回调的this 绑定到当前元素。这个调用可以在上面的代码 sn-p 中看到,其中obj 是类数组结构,i 是用于当前元素在数组中的位置的迭代器。