function foo() {
console.log(this.a)
}
var a = 1
foo()
const obj = {
a: 2,
foo: foo
}
obj.foo()
const c = new foo()
对于直接调用foo()来说,不管foo函数被放在什么地方,this一定是window;
对于obj.foo()来说,谁调用了函数,谁就是this,此时foo函数中的this就是obj对象;
对于new方式来说,this被永远绑定了在c上面,不会被任何方式改变this;
箭头函数中的this:
function a() {
return () => {
return () => {
console.log(this)
}
}
}
console.log(a()()())
首先箭头函数其实是没有 this 的,箭头函数中的 this 只取决包裹箭头函数的第一个普通函数的 this。在这个例子中,因为包裹箭头函数的第一个普通函数是 a,所以此时的 this 是 window。