this指向(普通函数与箭头函数的this)?
时间: 2024-05-19 09:11:34 浏览: 93
在 JavaScript 中,函数的 this 关键字是指调用该函数的对象。但是普通函数和箭头函数对 this 的处理方式是不同的。
普通函数的 this 关键字指向的是调用函数的对象。如果函数是作为对象的方法被调用,那么 this 就指向该对象。如果函数是独立调用的,那么 this 就指向全局对象(在浏览器中就是 window 对象,在 Node.js 环境中就是 global 对象)。
箭头函数的 this 关键字是根据词法作用域来确定的。箭头函数的 this 指向的是定义该函数时所在的作用域中的 this,而不是调用该函数时所在的作用域中的 this。因此,箭头函数的 this 无法通过 bind、call 或 apply 改变它的指向。
相关问题
this指向,普通函数与箭头函数
在 JavaScript 中,this 是一个非常特殊的关键字,它指向当前执行上下文的对象。但是,在普通函数和箭头函数中,this 的指向有所不同。
在普通函数中,this 指向调用该函数的对象。如果没有明确指定调用对象,则默认指向全局对象(浏览器中为 window 对象,Node.js 中为 global 对象)。
而在箭头函数中,this 不会根据调用方式而改变指向,而是继承自外部函数的执行上下文。这里的外部函数指的是包含当前箭头函数的最近的普通函数。
下面是一个示例:
```
const obj = {
name: 'Alice',
sayHi: function () {
console.log(`Hi, my name is ${this.name}`);
},
sayHiArrow: () => {
console.log(`Hi, my name is ${this.name}`);
}
};
obj.sayHi(); // 输出 "Hi, my name is Alice"
obj.sayHiArrow(); // 输出 "Hi, my name is undefined"
```
在上面的代码中,`sayHi()` 方法是一个普通函数,它的 this 指向调用它的对象 `obj`,因此输出了正确的名称。而 `sayHiArrow()` 方法是一个箭头函数,它的 this 继承自外部函数 `obj`,但是由于箭头函数没有自己的 this,因此输出了 undefined。
箭头函数this指向问题,箭头函数与普通函数的区别?
箭头函数和普通函数最大的区别在于它们的this指向不同。
普通函数的this指向是动态的,在运行时根据调用时的上下文决定。当使用函数调用、对象方法调用或apply/call/bind等方法调用时,this指向的对象不同。
而箭头函数的this指向是静态的,即函数定义时所在的词法作用域的this值,无法通过任何方式改变this的指向。
这意味着,在箭头函数内部使用this时,它指向的是箭头函数所在的上下文,而不是函数调用时的上下文。这也是为什么箭头函数经常被用来解决this指向问题的原因。
阅读全文