var i = -1;
$pics.each(function(){
$this = $(this);
i++;
setTimeout(function(){
console.log($this);//这里的$this指向jQuery对象集合的最后一个对象
$this.animateCss('zoomIn');
}, 200*i);
});
$pics是一个jQuery对象集合,那么setTimeout里面的$this指向哪里?上下两段代码的$this为什么不一样?
var i=-1;
$(".demo_scale").each(function() {
var $this=$(this);
if(!$this.hasClass("b_to_t")){
i++;
setTimeout(function(){
console.log($this);//这里的$this是指向第三行的$this的
$this.addClass("b_to_t");
},200*i);
}
});
亲自实验发现,setTimeout里面的$this指的是$pics集合中的元素
setTimeout的this 指向window
$pics each 的function域里
指each的每个子对象
第一个没有使用var声明,$this对象可能写入全局了,jquery对每个元素调用一次,$this的值以最后一次赋值为准。第二个声明为本地变量,为函数内部变量,多次调用函数不会相互串扰。
代码你这样写的话
$this指向jQuery对象集合中的最后一个jQuery对象
不一定 ,由于你不是var $this,所以$this是全局变量,存储 $(this)的值.
要看setTimeout()执行时 $this被赋给哪一个$(this)