在 js 中 this 不是固定不变的,它会随着执行环境的改变而改变。要注意的是 this 取什么值,是在执行时确认的,定义时无法确认。 this 的调用大概分为四种场景:
* (1)全局函数的this指向全局的Window对象
* (2)当函数作为对象的方法调用的时候,this指向该对象
* (3)构造函数的this指向实例化的对象
* (4)匿名函数的this指向全局的Window对象
匿名函数的this指向全局的Window对象:但是我们如何在匿名函数中获取user对象?(2种方法):
const user = { name: "lisi", age: 18, say() { console.log(this); // this指向user对象 setInterval(function () { console.log(this); // this指向全局的Window对象 }, 1000); }, }; user.say();
有两种方式:
方式一:通过是用箭头函数来实现
const user1 = { name: "lisi", age: 18, say() { console.log(this); // this指向user1对象 setTimeout(() => { console.log(this); // this指向user1对象 }, 1000); }, }; user1.say();
方式二:通过闭包的方式来实现:什么是闭包:子函数可以去访问父函数的局部变量。
const user2 = { name: "lisi", age: 18, say() { const that=this console.log(this); // this指向user2对象 setTimeout(function () { console.log(that); // this指向user2对象 }, 1000); }, }; user2.say();
* (5)箭头函数的this指向父级的作用域,箭头函数没有this