javascript - setTimeout里的this指向什么?
PHP中文网
PHP中文网 2017-04-11 09:46:17
[JavaScript讨论组]
            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);
            }
        });
PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
高洛峰

代码你这样写的话
$this指向jQuery对象集合中的最后一个jQuery对象

大家讲道理

不一定 ,由于你不是var $this,所以$this是全局变量,存储 $(this)的值.
要看setTimeout()执行时 $this被赋给哪一个$(this)

伊谢尔伦

第一个没有使用var声明,$this对象可能写入全局了,jquery对每个元素调用一次,$this的值以最后一次赋值为准。第二个声明为本地变量,为函数内部变量,多次调用函数不会相互串扰。

巴扎黑

亲自实验发现,setTimeout里面的$this指的是$pics集合中的元素

PHP中文网

$pics each 的function域里
指each的每个子对象

迷茫

setTimeout的this 指向window

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号