javascript - setTimeout第一个参数的疑问
巴扎黑
巴扎黑 2017-04-11 08:57:09
[JavaScript讨论组]
var obj = {
    str : 'value',
    tall : function(){
        console.log(this.str);
    }
};

setTimeout(obj.tall, 1000);
setTimeout(obj.tall(), 1000);
setTimeout(function(){
    obj.tall(); 
}, 1000);

代码执行后,输出的结果分别是: undefined, value, value
对第一个打印“undefined”不理解?

巴扎黑
巴扎黑

全部回复(4)
阿神

第一个等价于

setTimeout(function(){
    console.log(this.str)//this指向的是window
}, 1000);
迷茫

按输出顺序应该是: value, undefined, value。

解释:
第一个是:

setTimeout(obj.tall(), 1000);

这句输出的,因为立即调用了obj.tall()

第二个是:

setTimeout(obj.tall, 1000);

解释参考:@crp205 答案。 this并不是指向obj的。

第三个:

setTimeout(function(){
    obj.tall(); 
}, 1000);

此时this指向obj

天蓬老师

输出的结果应该是 value,undefined,value 吧,第一个的确是像上面那个说的那样。

天蓬老师

个人想法,有什么问题还望指正。
1.接着第一位的回答补充。

setTimeout(obj.tall, 1000);

类似于

setTimeout(function(){
        console.log(this.str);
    }, 1000);

里面函数的执行属于函数调用模式,函数调用模式this代表全局对象window

最后分享一道面试题:

var length=10;
function fn(){
    console.log(this.length);
}
var obj = {
    length:5,
    method: function (fn) {

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

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