Какова связь между вызовом функции и ключевым словом this?

Я довольно новичок в JavaScript, и я только начал работать с .apply() и другие методы, которые используют ключевое слово thisи я могу сказать, что this имеет какое-то отношение к контексту, в котором вызывается функция, но я бы очень хотел понять, что именно this имеет в виду.

Связь между вызовом определенной функции и this выглядит похожим на отношения между объектом и свойством / методом.

Эти два отношения связаны в любом случае?

2 ответа

Согласно разделу 11.1.1 спецификации языка ECMAScript ответ

Ключевое слово this оценивает значение ThisBinding текущего контекста выполнения.

Вот три случая, которые вы можете рассмотреть. Они не описаны формально, а просто и интуитивно понятны:

Контекст по умолчанию

Если вы не указываете контекст и вызываете функцию (не метод), this будет глобальным объектом:

function foo() {
  console.log(this); //window
}

Установить контекст неявно

Если вы вызываете функцию, которая является методом данного объекта this будет объектом перед последней точкой:

function foo() {
  console.log(this);
}

var bar = {};
bar.foo = foo;
bar.foo(); //bar
bar.baz = {};
bar.baz.foobar = foo;
bar.baz.foobar(); //bar.baz

Установите контекст явно

Вы можете изменить контекст, используя call, apply, bind:

function foo() {
  console.log(this);
}

foo.call(1); //1
foo.call(window); //window

var bar = {};
bar.foo = foo;
bar.foo.apply(42); //42
Другие вопросы по тегам