箭头函数的this指向哪里?
在JavaScript中,箭头函数并不绑定自己的this,它会捕获其所在上下文的this值,作为自己的this值。换句话说,箭头函数不会创建自己的this上下文,所以this取决于箭头函数被定义时的环境。
这与传统的函数表达式和函数声明不同,后者在调用时会有自己的this值,这个值通常取决于函数的调用方式(例如,直接调用、作为方法调用、通过call或apply调用等)。
举个例子:
function OuterFunction() {
this.value = 20;
// 箭头函数
this.arrowFunc = () => {
console.log(this.value); // 这里的this指向OuterFunction的实例
}
// 普通函数
this.normalFunc = function() {
console.log(this.value); // 这里的this可能不指向OuterFunction的实例,取决于如何调用normalFunc
}
}
const instance = new OuterFunction();
instance.arrowFunc(); // 输出:20,因为箭头函数中的this指向OuterFunction的实例
const normalFunc = instance.normalFunc;
normalFunc(); // 输出:undefined,因为此时this指向全局对象(在浏览器中是window),而不是OuterFunction的实例
在这个例子中,arrowFunc是一个箭头函数,它捕获了定义它的上下文(即OuterFunction的实例)的this值。因此,无论arrowFunc如何被调用,this都始终指向OuterFunction的实例。相比之下,normalFunc是一个普通的函数,它的this值取决于如何被调用。在上面的例子中,当我们把normalFunc赋值给一个变量并直接调用时,this指向了全局对象(在浏览器环境中是window),而不是OuterFunction的实例。
浙公网安备 33010602011771号