最近没事干,在牛客网上刷题,刷到一个this指向的题。感觉有必要记录一下,顺便学习了。
先上题目:
执行下列选项的程序,输出结果不是Window对象的是()
// A
setTimeout(function(){
console.log(this);
},1000);
// B
function Star(){
console.log(this);
}
new Star();
// C
var 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创建的对象

京公网安备 11010502036488号