yisainan / web-interview

我是齐丶先丶森,收集整理全网面试题及面试技巧,旨在帮助前端工程师们找到一份好工作!更多详见公众号「前端面试秘籍」
MIT License
2.61k stars 507 forks source link

[选择题] 49.(单选题)下面代码的输出是什么 #1027

Open qiilee opened 4 years ago

qiilee commented 4 years ago
var status = '🐰'
setTimeout(() => { 
    const status = '🐎'
    const data = { 
        status: '🐍'
        getStatus() {
            return this.status
        }
    }
    console.log(data.getStatus()) 
    console.log(data.getStatus.call(this)) 
}, 0)
A:'🐍' and '🐎'
B: '🐍' and '🐰'
C: '🐎' and '🐰'
D: '🐰' and '🐰'

答案:B

解析:

this关键字的指向取决于使用它的位置。在函数中,比如 getStatus,this指向的是调用它的对象,上述例子中data对象调用了 getStatus因此this指向的就是data对象,当我们打印this.status时,data对象 的 status属性被打印,即'🐍'。

使用call方法,可以更政this指向的对象。data.getStatus.call(this)是将this的指向由data对象更改为全局对象。在全局对象上,有一个名为 status的变量,其值为'🐰'。因此打印this.status时,会打印'🐰'