我经常看到像这样的代码:
$('.element').on('click', function(event) {
var element = this;
// somecode that uses "element"
});
有没有理由缓存this
?
答案 0 :(得分:2)
如果代码包含需要访问this
的闭包,则必须这样做。 this
不是局部变量,因此不会在闭包中捕获,您需要为此目的绑定局部变量。
如果代码包含使用类似$.each()
的函数的循环,并且循环体需要引用元素,则还需要它。这些函数将正文中的this
重新绑定到当前迭代对象。
答案 1 :(得分:2)
如果需要在另一个代码范围内引用它,很多人都会设置对this
的引用。例如:
$('.element').on('click', function(event) {
var element = this;
// somecode that users "element"
function foo() {
//$(this).text() WONT Work!
alert($(element).text()); //references the element that was clicked
}
});
答案 2 :(得分:1)
进入函数或循环后,this
可能会引用该函数中的对象。因此明确指定元素允许您始终访问它,与范围无关。
答案 3 :(得分:0)
this
不是jQuery元素,将其包装在$(this)
。
缓存很好,因为它存储元素,并且它不会占用内存或处理时间来尝试重新找到元素。但是,this
会更改范围,因此您可能不希望缓存该范围。