首页 > setTimeout里的this指向什么?

setTimeout里的this指向什么?

            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)

【热门文章】
【热门文章】