第11天:这个
#javascript #100daysofcode #day11

什么是this

在JavaScript中,this是一个特殊的关键字,它是指执行函数的上下文。 this的值是根据调用函数的方式而不是定义的方式动态确定的。上下文可以是全局对象,拥有所调用方法的对象,甚至使用callapplybind进行明确设置。

在不同情况下了解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继承的,不绑定到函数。