JavaScript 中 this 关键字和箭头函数的行为解释
JavaScript 中 this 关键字和箭头函数的行为解释
以下代码演示了在 JavaScript 中 this 关键字和箭头函数的不同行为:
const people = {
name: '',
hello() {
console.log(this.name)
},
hey: () => {
console.log(name, 22)
}
}
people.hello()
people.hey()
解释:
-
people.hello()会打印出空字符串,因为this关键字在hello方法中指向了people对象,所以this.name就是people对象的name属性,而初始时name属性为空字符串。 -
people.hey()会报错,因为箭头函数中的this关键字不会绑定到任何对象,它的上下文是定义时的上下文。在这种情况下,箭头函数hey()是在全局作用域中定义的,所以它的上下文是全局对象。因此,console.log(name, 22)中的name是在全局作用域中寻找name变量,但是该变量未定义,所以会报错。
总结:
- 在普通函数中,
this关键字的值取决于函数的调用方式。在对象方法中,this指向调用该方法的对象。 - 箭头函数没有自己的
this绑定,它继承了定义时的上下文。
建议:
- 为了避免混淆,在对象方法中尽量使用普通函数,而不是箭头函数。
- 如果需要访问对象属性,请使用
this关键字。 - 如果需要访问全局变量,请在全局作用域中声明它们。
原文地址: https://www.cveoy.top/t/topic/qn9I 著作权归作者所有。请勿转载和采集!