最近没事干,在牛客网上刷题,刷到一个this指向的题。感觉有必要记录一下,顺便学习了。
先上题目:
执行下列选项的程序,输入后果不是Window对象的是()
// AsetTimeout(function(){ console.log(this);},1000);// Bfunction Star(){ console.log(this);}new Star();// Cvar o = { sayHi:()=>{ console.log(this); }}o.sayHi();// D(function(){ console.log(this);}());
答案是:B,上面来解释一下起因。
- 没有非凡场景,默认绑定,
this
就指向window
- 有关键字
new
,this就指向new
进去的那个对象 - 看上去是obj在调用,然而实际上用了箭头函数,所以
this
还是指向window
,起因是箭头函数没有本人的this,只能向外层寻找,因而还是指向this - 没有非凡场景,默认绑定,
this
就指向window
总结:
- 谁调用
this
,this
就指向谁- fn() 赤裸裸的,默认绑定,指向this,无论在哪里调用实际上是
window.fn() window
调用,指向window
- obj.fn() 隐式绑定,指向
obj,obj
在调用call()、apply()、bind
显式绑定,要指向谁就写在()外面
5.new fn()
new绑定,指向new创立的对象