一.普通函数
指向window
1.全局调用
function fn1() {
console.log(this)
}
fn1()
执行结果:window
2.嵌套调用
function fn1() {
function fn2() {
console.log(this)
}
fn2()
}
fn1()
执行结果:window
二.构造函数
指向被new出来的实例对象
function Obj() {
this.fn = function () {
console.log(this)
}
}
let obj = new Obj()
obj.fn()
执行结果:
三.作为对象的属性
指向该对象
obj = {
fn: function () {
console.log(this)
}
}
obj.fn()
执行结果:指向obj
四.在定时器里
指向window
setTimeout(function () { console.log(this) }, 1000)
执行结果:window
五.在箭头函数里
箭头函数没有自己的this,它的this从所在的作用域链继承
1.第一种情况
obj = {
fn: () => console.log(this)
}
obj.fn()
this是指obj的this,故执行结果是window
2.第二种情况
obj = {
fn: function () {
let x = () => console.log(this);
x()
}
}
obj.fn()
this是function的this,故运行结果是obj