什么是this
?
在JavaScript中,this
是一个特殊的关键字,它是指执行函数的上下文。 this
的值是根据调用函数的方式而不是定义的方式动态确定的。上下文可以是全局对象,拥有所调用方法的对象,甚至使用call
,apply
或bind
进行明确设置。
在不同情况下了解this
:
全球环境:
当在全局范围(外部函数或对象之外)中引用this
时,它是指全局对象。在浏览器中,全局对象是window
对象。
console.log(this === window); // Output: true
功能上下文:
当this
在常规函数中使用时,其值取决于该函数的调用。
function sayHello() {
console.log(this);
}
sayHello(); // Output: window (in non-strict mode), undefined (in strict mode)
方法上下文:
当对象的方法内使用this
时,它是指对象本身。
const person = {
name: 'John',
greet: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
person.greet(); // Output: Hello, my name is John
严格模式:
在JavaScript严格模式下,在全局范围中调用函数时,this
的值不会自动胁迫到全局对象。相反,它仍然是undefined
。
'use strict';
function showThis() {
console.log(this);
}
showThis(); // Output: undefined
箭头功能:
箭头功能没有自己的this
绑定。相反,他们从周围的词汇范围继承了this
值。此行为使箭头功能在回调函数或要保留this
上下文时特别有用。
const person = {
name: 'Alice',
greet: function() {
const innerFunc = () => {
console.log(`Hello, I'm ${this.name}`);
};
innerFunc();
}
};
person.greet(); // Output: Hello, I'm Alice
概括
- 全局上下文:这是指
global
对象。 - 函数上下文:这是指在非图片模式下的
global
对象。在严格的模式下,是undefined
。 - 方法上下文:这是指
object
调用方法。 - 箭头函数:这是从
surrounding context
继承的,不绑定到函数。