函数调用和关键字"this"之间的关系是什么?



我对 JavaScript 很陌生,我刚刚开始使用.apply()和其他使用关键字 this 的方法,我可以说this与调用函数的上下文有关,但我真的很想了解this到底指的是什么。

特定函数调用和this之间的关系类似于对象和属性/方法之间的关系。

这两种关系到底有关系吗?

根据 ECMAScript 语言规范第 11.1.1 节,答案是

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

显式设置上下文

您可以使用callapplybind更改上下文:

function foo() {
  console.log(this);
}
foo.call(1); //1
foo.call(window); //window
var bar = {};
bar.foo = foo;
bar.foo.apply(42); //42

最新更新